簡體   English   中英

Qt:識別QTreeView的項目

[英]Qt: Recognizing items of QTreeView

示例樹視圖:

1. a
1.1. b
1.1.1. c

我想知道如何使我的代碼識別我右鍵單擊a還是b或c。 我能夠創建一個TreeView,向其中添加abc,並在右鍵單擊的位置獲取該項目,但是我不知道如何識別該項目,因此右鍵單擊會創建與單擊的項目有關的不同上下文菜單。 我使用標准項目模型( QStandardItemModel ),到目前為止,我得到的是:

void MyWindow::make_tree_custom_menu(const QPoint& pos){
    QModelIndex index = treeView->indexAt(pos);
    int itemRow = index.row();
    int itemCol = index.column();
    QStandardItem* itemAtPos = model->item(itemRow, itemCol);
    itemAtPos->setText("meh");
}

我知道使用QTreeWidgetItem可以執行QTreeWidgetItem* newitem = new QTreeWidgetItem(name, itemtype); 但據我在文檔中看到的, QStandardItem沒有此類構造函數。 另外,我知道這是存在的,但尚未得到答案。 因此,我希望對在這種應用程序中識別樹視圖項的可能方法提供任何幫助。

首先,在這種情況下,我建議使用QStandardItemModel::itemFromIndex(const QModelIndex & index)方法來獲取項目。 QStandardItemModel::item(int row, int column)方法沒有父參數,因此我認為它僅返回頂級項目(此方法適用於列表或表)。

然后,當您獲得項目時,您將完全具有所創建項目的指針,因此您擁有識別它所需要的一切。 如果要為項目設置屬性以定義類型(例如QTreeWidgetItem itemType ),則可以在創建時使用QStandardItem::setData(const QVariant & value, int role)方法(使用例如Qt::UserRole )該項目。 然后,您可以使用make_tree_custom_menu方法中的QStandardItem::data(int role)方法獲取項目類型。

看到:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM