QTreeWidgetItem*->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable);// 設置某一行的內容可編輯
。
QTreeWidget::closePersistentEditor ( QTreeWidgetItem * item, int column = 0 )則可以用來關閉某一行某一列的始終編輯狀態
在鼠標雙擊樹控件的某個部分的時候,樹控件會發出一個消息itemDoubleClicked ( QTreeWidgetItem * item, int column ),如果我們捕捉這個消息 ,並判斷Column的值,就可以使得某一列可以編輯,而其它列不可編輯。但是由於openPersistentEditor 會使得這個單元格始終可編輯 ,及時鼠標已經沒有選中該單元格了,所以,我們還需要在用戶編輯完當前單元格時,調用closePersistentEditor來關閉單元格始終可以編輯狀態,可以在itemSelectionChanged()信號的信號處理函數處理(就是選中不修改值的,也會發出此信號)。
在構造函數中:
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;
}
}
// 當修改完以後或者選中其他列的時候,關閉可編輯狀態
{
//QMessageBox::question(this,"修改",QString("%1").arg(temColumn),QMessageBox::Yes,QMessageBox::No);
if(temItem != NULL)
{
ui->feederset_treeWidget->closePersistentEditor(temItem,temColumn);// 設置某一item不可以編輯
}
}