我有一个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让我能够过滤建议?你有什么建议?
谢谢你!
答案 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