QTreeViewにはいくつかの項目があり、QLineEditはtextEditedシグナルの接続されたスロットで検索します。このコードで :QSortFilterProxyModel QStandardItemsを正しく処理する方法
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(messagesModel);
proxyModel->setFilterFixedString(text);
ui.treeView->setModel(proxyModel);
テキストフィルタリングはOKですが、私は(QTreeViewに割り当てられたプロキシモデルの後)QTreeView QStandardItemsチェックボックスをクリックしたとき、私はこのQTreeViewオリジナルモデルに接続されている、スロット内のプログラムがクラッシュを持っています(プロキシが割り当てられる前に)。 アイテムチェックボックスのクリックを処理する正しい方法は何ですか?私は、モデルの変更を処理するために新しい接続/スロットを使用する必要がありますか、またはいくつかの変更を加えて元のモデルに同じコードを使用できますか? QTreeViewでフィルタリングされた項目を非表示にするだけです。 QTreeWidgetはhide()メソッドですが、QTreeViewにはこのようなものがありますか、QSortFilterProxyModelは必要ですか?どうも!
UPDは、ツリービューに接続され、スロットに墜落:
auto item = messagesModel->itemFromIndex(index); // item is NULL because proxyModel is set for TreeView now
if(item->whatsThis().isEmpty()) return; // error below
#ifndef QT_NO_WHATSTHIS
inline QString whatsThis() const {
return qvariant_cast<QString>(data(Qt::WhatsThisRole));
}
inline void setWhatsThis(const QString &whatsThis);
#endif
私がツリービューにproxyModelを設定しますが、whatsThisを持っているmessagesModelので...
あなたがクラッシュされているコードを表示よりもクラッシュを持っています。クラッシュしたコールスタックがコードを指していない場合は、このコールスタックを質問に貼り付けます。 –
'treeWidget' - それは本当にQTreeViewですか、それともQTreeWidgetですか? –
はい。申し訳ありません - treeWidgetはQTreeViewでなければなりません。クラッシュが付加されたコード –