На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> [Qt] заполнение таблицы из справочника, фильтр
    Добрый день!
    есть QTableWidget в которой одна колонка может заполняться значениями только из справочника (таблица в БД).
    Хочется сделать, чтоб при начале ввода текста в ячейку выводился выпадающий список со значениями таблицы, которые имеют введенные символы в качестве подстроки.
    Подскажите - в какую сторону копать?
      Если я Вас правильно понял, то нужно сделать делегат QLineEdit + QCompleter для ячейки.
      Чуть позже выложу код.

      Добавлено
      Заместо QTableWidget использовать QTablwView насколько мне известно делегаты работают только с View

      Добавлено
      Как сделать делегат смотрите пример SpinBoxDelegate, как использовать QCompleter смотрите пример Completer, которые идут вместе с офф докой.
      Сообщение отредактировано: like-nix -
        Цитата like-nix @
        Если я Вас правильно понял, то нужно сделать делегат QLineEdit + QCompleter для ячейки.
        Чуть позже выложу код.

        Да. Вы абсолютно правильно меня поняли)) спасибо, курю маны...
        а в QCompleter можно дополнять не только по началу строки?
        То есть в примере:
        ExpandedWrap disabled
              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 все не хочется, так что видимо реализую справочник отдельным модальный окном)
          Цитата вщщр @
          если начинаешь набирать "b" то подходит только строка "bcde"( маска b*). А хочется чтоб выводились строки "abcd" и "bcde" ( маска *b*). Можно ли сделать так?

          Наверное так нет. Наверное самому придется самому делать поиск и отображение списка. Мне только пока один вариант в голову пришел как такое можно сделать . Это нужно у такблицы ловить keyPressEvent определять какая яжейка активна и отображать список около нее. Отпишитесь, если придумали что-нибудь получше.
            В общем решил вделать отдельный окном с использованием QSqlTableModel.
            ExpandedWrap disabled
              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;
              }

            Пока что черновик, еще буду доделывать.
              а впиндюрить в ячейку комбобокс не пробовали? у него и автозаполнение есть...

              Добавлено
              хотя наверно для большого списка это не подойдет...
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0230 ]   [ 16 queries used ]   [ Generated: 20.06.25, 14:52 GMT ]