QCompleter和QListWidget作为自定义弹出窗口问题

时间:2012-08-08 16:25:23

标签: qt model autocomplete qcompleter

我有一个QCmpleter,为我的QPlainTextEdit(check this example)使用QStringListModel:

  QStringListModel* model = new QStringListModel(names);
  QCompleter* completer = new QCompleter(model);
  completer->setCompletionMode(QCompleter::PopupCompletion);
  completer->setModelSorting(QCompleter::UnsortedModel);

工作正常。现在我需要一些Icon,每个建议的工具提示我试图使用QListWidget作为自定义弹出窗口:

  QListWidget* w = new QListWidget();
  foreach(name, names) {
    QListWidgetItem* i = new QListWidgetItem(name);
    i->setIcon(/*my Icon*/);
    i->setToolTip("");
    w->addItem(i);
  }
  completer->setPopup(w);

弹出窗口确定,就像我需要的那样,但完成后不再工作了。我无法输入文字以使其过滤建议,只需向上/向下键 我试过了:

  completer->setModel(w->model());

但没有帮助!
什么是我的错误或只是QStringListModel让我能够过滤建议?你有什么建议?
谢谢你!

1 个答案:

答案 0 :(得分:3)

我主要处理PyQt,但同样的交易。我的语法可能已关闭,但您应该使用QStandardItemModel与QStringListModel。从那里,您可以将其保留为标准弹出窗口(QListView)

类似的东西:

QStandardItemModel* model = new QStandardItemModel();

// initialize the model
int rows = names.count();  // assuming this is a QStringList
model->setRowCount(rows);
model->setColumnCount(1);

// load the items
int row = 0;
foreach(name, names) {
    QStandardItem* item = new QStandardItem(name);
    item->setIcon(QIcon(":some/icon.png");
    item->setToolTip("some tool tip");
    model->setItem(row, 0, item);
    row++;
}

completer->setModel(model);
completer->popup()->setModel(model); // may or may not be needed