Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-4348

QCompleter::setCompletionRole() not working as documented

    XMLWordPrintable

Details

    Description

      QCompleter fails to work properly when using popup
      completion and using either ::setCompletionColumn() or
      ::setCompletionRole().

      This task is for comp3 in the following example

      #include <QtGui>
      #include <QStandardItemModel>
      
      int main(int argc, char *argv[]) {
        QApplication a(argc, argv);
      
        // setup model
        QStandardItemModel m;
        QStandardItem *item1 = new QStandardItem("fooA");
        item1->setData(QVariant("fooW"));
        QStandardItem *item2 = new QStandardItem("foo1");
        m.appendRow(QList<QStandardItem*>()<<item1<<item2);
      
        item1 = new QStandardItem("fooB");
        item1->setData(QVariant("fooX"));
        item2 = new QStandardItem("foo2");
        m.appendRow(QList<QStandardItem*>()<<item1<<item2);
      
        item1 = new QStandardItem("fooC");
        item1->setData(QVariant("fooY"));
        item2 = new QStandardItem("foo3");
        m.appendRow(QList<QStandardItem*>()<<item1<<item2);
      
        item1 = new QStandardItem("fooD");
        item1->setData(QVariant("fooZ"));
        item2 = new QStandardItem("foo4");
        m.appendRow(QList<QStandardItem*>()<<item1<<item2);
      
        // setup gui
        QWidget w;
      
        QVBoxLayout *vlay = new QVBoxLayout(&w);
      
        QLabel *l = new QLabel("In each edit box type the letter 'f' to cause the completion drop-down to appear. Then use the down-arrow to cycle through each item in the completion list. Note the behavior on each.\n\nThe first is correct. The second one does not allow you to scroll to any items except the first and the last (by using the up arrow key). The third one displays the wrong text in the drop-down, but fills the correct value into the edit box.\n\nSee comments in the code to see the exact line of code that causes each problem.");
        l->setWordWrap(true);
        vlay->addWidget(l);
      
        QLineEdit *le1 = new QLineEdit();
        vlay->addWidget(le1);
      
        QLineEdit *le2 = new QLineEdit();
        vlay->addWidget(le2);
      
        QLineEdit *le3 = new QLineEdit();
        vlay->addWidget(le3);
      
        // setup completers
        QCompleter *comp1 = new QCompleter(le1);
        comp1->setModel(&m);
        comp1->setCompletionColumn(0);
        le1->setCompleter(comp1);
      
        QCompleter *comp2 = new QCompleter(le2);
        comp2->setModel(&m);
        comp2->setCompletionColumn(1);  ///// This line causes the problem. Can't use any column but 0
        le2->setCompleter(comp2);
      
        QCompleter *comp3 = new QCompleter(le3);
        comp3->setModel(&m);
        comp3->setCompletionColumn(0);
        comp3->setCompletionRole(Qt::UserRole+1);  ///// This line causes the problem. Can't use any role but the default
        le3->setCompleter(comp3);
      
        // show widget
        w.show();
        return a.exec();
      }
      
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            hanssen Andreas Aardal Hanssen (closed Nokia identity) (Inactive)
            dettman Dean Dettman (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes