2

我有一个 QCompleter 为我的 QPlainTextEdit 使用 QStringListModel (检查这个例子):

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

它工作正常。现在我需要一些图标,工具提示,用于我尝试使用 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 让我能够过滤建议?你有什么建议?
谢谢!

4

1 回答 1

4

我主要处理 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
于 2012-08-09T20:29:35.590 回答