簡體   English   中英

重命名 QTreeView 項目

[英]Renaming QTreeView Items

我已經環顧了很長一段時間,但一直無法找到嘗試重命名 QTreeView 中的項目的解決方案。 基本上我的意思是當您雙擊 QTreeView 中的某些內容時,您可以選擇重命名該項目。 當用戶完成名稱的編輯后,我需要一個信號來告訴我樹中的索引或已編輯的 QStandardItem,以便我可以更改附加到 QStandardItem 的特定項目名稱。

這可能有點含糊,我不能真正提供我的來源,因為它需要我給你我的整個項目,這是幾個演出。 如果您需要我解釋其他任何事情,我會盡力而為,我還會附上我正在談論的內容的圖像,以便更好地理解。

雙擊重命名

基本上我的意思是當您雙擊 QTreeView 中的某些內容時,您可以選擇重命名該項目。

使用QStandardItemsetFlags()函數設置Qt::ItemIsEditable

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow w;
    QTreeView *treeView = new QTreeView;
    QStandardItemModel model(4, 1);
    for (int row = 0; row < 4; ++row) {
        QStandardItem *item = new QStandardItem(QString("row %0").arg(row));
        item->setFlags(item->flags() | Qt::ItemIsEditable);
        model.setItem(row, 0, item);
    }
    treeView->setModel(&model);
    w.setCentralWidget(treeView);
    w.show();

    return a.exec();
}

Qt::ItemIsEditable標志與現有標志進行Qt::ItemIsEditable很重要,否則您最終會得到禁用的項目。 例如,以下是與現有標志進行 OR 運算后的標志:

QFlags<Qt::ItemFlags>(ItemIsSelectable|ItemIsEditable|ItemIsDragEnabled|ItemIsDropEnabled|ItemIsEnabled)

沒有現有的:

QFlags<Qt::ItemFlags>(ItemIsEditable)

當用戶完成名稱的編輯后,我需要一個信號來告訴我樹中的索引或已編輯的 QStandardItem,以便我可以更改附加到 QStandardItem 的特定項目名稱。

您可以連接到QStandardItemModeldataChanged()信號:

QObject::connect(&model, SIGNAL(itemChanged(QStandardItem*)),
    &myObject, SLOT(onItemChanged(QStandardItem*)));

暫無
暫無

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

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