QT中設置QTreeWidget某一列可編輯

大家都知道,在Qt中, QTreeWidget都是QTreeWidgetItem的形式來組織的,也就是說如果單獨設置屬性的話,可以使得某一行可以編輯或者不可編輯
 
QTreeWidgetItem*->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);// 設置某一行的內容可編輯
這裏給大家介紹個方法來使某一列僅可編輯。

 QTreeWidget::openPersistentEditor ( QTreeWidgetItem * item, int column = 0 )可用來打開某一行的某一列的編輯狀態

QTreeWidget::closePersistentEditor ( QTreeWidgetItem * item, int column = 0 )則可以用來關閉某一行某一列的始終編輯狀態

在鼠標雙擊樹控件的某個部分的時候,樹控件會發出一個消息itemDoubleClicked ( QTreeWidgetItem * item, int column ),如果我們捕捉這個消息 ,並判斷Column的值,就可以使得某一列可以編輯,而其它列不可編輯。但是由於openPersistentEditor 會使得這個單元格始終可編輯 ,及時鼠標已經沒有選中該單元格了,所以,我們還需要在用戶編輯完當前單元格時,調用closePersistentEditor來關閉單元格始終可以編輯狀態,可以在itemSelectionChanged()信號的信號處理函數處理(就是選中不修改值的,也會發出此信號)。
關鍵代碼部分:
在構造函數中:
connect(ui->feederset_treeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
            this,SLOT(openEditor(QTreeWidgetItem*,int)));
connect(ui->feederset_treeWidget,SIGNAL(itemSelectionChanged()),
            this,SLOT(closeEditor()));

ui->feederset_treeWidget->setStyleSheet("QTreeWidget::item{height:20px}");// 設置行距大小,可以防止編譯修改完成以後,行距會發生變化

/* 在兩個槽處理函數中 */
// 設置除了第一列和第五列之外的列,雙擊的可以修改
void xdlConfig::openEditor(QTreeWidgetItem *item, int column)
{
    if(column != 0 && column != 4)
    {
        ui->feederset_treeWidget->openPersistentEditor(item,column);// 設置某一item可以編輯
        temItem = item;
        temColumn = column;
    }
}
// 當修改完以後或者選中其他列的時候,關閉可編輯狀態
void xdlConfig::closeEditor()
{
    //QMessageBox::question(this,"修改",QString("%1").arg(temColumn),QMessageBox::Yes,QMessageBox::No);
    if(temItem != NULL)
    {
        ui->feederset_treeWidget->closePersistentEditor(temItem,temColumn);// 設置某一item不可以編輯
    }
}
發佈了82 篇原創文章 · 獲贊 131 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章