
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
Добрый день!
есть QTableWidget в которой одна колонка может заполняться значениями только из справочника (таблица в БД). Хочется сделать, чтоб при начале ввода текста в ячейку выводился выпадающий список со значениями таблицы, которые имеют введенные символы в качестве подстроки. Подскажите - в какую сторону копать? |
Сообщ.
#2
,
|
|
|
Если я Вас правильно понял, то нужно сделать делегат QLineEdit + QCompleter для ячейки.
Чуть позже выложу код. Добавлено Заместо QTableWidget использовать QTablwView насколько мне известно делегаты работают только с View Добавлено Как сделать делегат смотрите пример SpinBoxDelegate, как использовать QCompleter смотрите пример Completer, которые идут вместе с офф докой. |
Сообщ.
#3
,
|
|
|
Цитата like-nix @ Если я Вас правильно понял, то нужно сделать делегат QLineEdit + QCompleter для ячейки. Чуть позже выложу код. Да. Вы абсолютно правильно меня поняли)) спасибо, курю маны... а в QCompleter можно дополнять не только по началу строки? То есть в примере: ![]() ![]() QLineEdit *line = new QLineEdit; QTableWidgetItem *item1 = new QTableWidgetItem; QStringList wordList; wordList << "abcd" << "bcde" << "cdef"<<"defg"; QCompleter *completer = new QCompleter(wordList); completer->setCaseSensitivity(Qt::CaseInsensitive); line->setCompleter(completer); если начинаешь набирать "b" то подходит только строка "bcde"( маска b*). А хочется чтоб выводились строки "abcd" и "bcde" ( маска *b*). Можно ли сделать так? (переделывать под QTableView все не хочется, так что видимо реализую справочник отдельным модальный окном) |
Сообщ.
#4
,
|
|
|
Цитата вщщр @ если начинаешь набирать "b" то подходит только строка "bcde"( маска b*). А хочется чтоб выводились строки "abcd" и "bcde" ( маска *b*). Можно ли сделать так? Наверное так нет. Наверное самому придется самому делать поиск и отображение списка. Мне только пока один вариант в голову пришел как такое можно сделать . Это нужно у такблицы ловить keyPressEvent определять какая яжейка активна и отображать список около нее. Отпишитесь, если придумали что-нибудь получше. |
Сообщ.
#5
,
|
|
|
В общем решил вделать отдельный окном с использованием QSqlTableModel.
![]() ![]() classifierWdg::classifierWdg(QWidget *parent) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout; line = new QLineEdit; tbModel =new QSqlTableModel; tbModel->setTable("okdp"); // таблица со справочником tbModel->select(); tbModel->removeColumn(0); // id не показывать QTableView *view = new QTableView; view->setModel(tbModel); layout->addWidget(line); layout->addWidget(view); setLayout(layout); connect(line, SIGNAL(textChanged(QString)), this,SLOT(lineTextChanged())); } bool classifierWdg::lineTextChanged() { tbModel->setFilter("okdpname like '%"+line->text()+"%'"); return 0; } Пока что черновик, еще буду доделывать. |
Сообщ.
#6
,
|
|
|
а впиндюрить в ячейку комбобокс не пробовали? у него и автозаполнение есть...
Добавлено хотя наверно для большого списка это не подойдет... |