2

QPlainTextEditにQStringListModelを使用するQCompleterがあります(この例を確認してください)。

  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 に答える