[英]Renaming QTreeView Items
我已經環顧了很長一段時間,但一直無法找到嘗試重命名 QTreeView 中的項目的解決方案。 基本上我的意思是當您雙擊 QTreeView 中的某些內容時,您可以選擇重命名該項目。 當用戶完成名稱的編輯后,我需要一個信號來告訴我樹中的索引或已編輯的 QStandardItem,以便我可以更改附加到 QStandardItem 的特定項目名稱。
這可能有點含糊,我不能真正提供我的來源,因為它需要我給你我的整個項目,這是幾個演出。 如果您需要我解釋其他任何事情,我會盡力而為,我還會附上我正在談論的內容的圖像,以便更好地理解。
基本上我的意思是當您雙擊 QTreeView 中的某些內容時,您可以選擇重命名該項目。
使用QStandardItem
的setFlags()
函數設置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 的特定項目名稱。
您可以連接到QStandardItemModel
的dataChanged()
信號:
QObject::connect(&model, SIGNAL(itemChanged(QStandardItem*)),
&myObject, SLOT(onItemChanged(QStandardItem*)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.