Добавьте QTableView в QComboBox.

Я получаю набор результатов из базы данных и хочу заполнить QComboBox результирующими столбцами из базы данных (каждая строка QComboBox должна иметь те же столбцы, что и результат базы данных), и после этого я хотел бы иметь возможность получить из одной строки QComboBox конкретный столбец и использовать его в дальнейшем в приложении. Я думаю, можно ли добавить QTableView в QComboBox. Я хочу сделать это, потому что хочу добавить больше смысла в результаты таким образом, чтобы некоторые столбцы результатов были просто числами, а другие — описательной информацией.

Я обнаружил, что можно объединить результат и заполнить QComboBox, но это оставит мне только одно значение для каждой строки для работы, и мне нужно разбить строку, чтобы получить точную часть, с которой нужно работать. .


person Starlays    schedule 17.09.2017    source источник
comment
Будет лучше создать свой собственный виджет для выполнения такой работы, создать QLineEdit добавить действие с некоторым значком со стрелкой вниз (например, в поле со списком) и при запуске действия всплывающее окно QFrame, содержащее ваш QTableView или любой другой виджет, который вы хотите всплывающее окно,   -  person Simon    schedule 17.09.2017


Ответы (1)


Всплывающее окно, которое появляется по умолчанию, представляет собой QListView, его можно изменить с помощью любого объект, который наследуется от QAbstractItemView, и в данном случае QTableView будет использоваться для использования setView() результат при клике должен возвращать только элемент выбранной строки, затем установить столбец для отображения после будет использоваться метод setModelColumn(), указывающий позицию столбец, но перед этим модель устанавливается в QComboBox с помощью метода setModel().

# my model
model = new QSqlTableModel;
model->setTable("person");
model->select();
# setModel
comboBox->setModel(model);
# select column
comboBox->setModelColumn(1);

QTableView  *view = new QTableView(this);
comboBox->setView(view);

Примечание. Модель установлена ​​в QComboBox, а не в QTableView. Также у вас могут возникнуть проблемы с шириной QTableView, поэтому мы должны изменить размер, в моем случае используйте следующее:

view->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
view->setMinimumWidth(500);

Полный пример можно найти по следующей ссылке

person eyllanesc    schedule 17.09.2017