2017-03-09 14 views
1

この問題は質問Making only one column of a QTreeWidgetItem editableの重複ではないことを念頭に置いてください。QTreeWidgetの1列のみを編集可能にする//

こんにちは、私はtreeWidgetの1つの列を編集可能にしたいだけです。

  propertyItems.push_back(new QTreeWidgetItem); //gets filled by the while-loop 
      propertyItems[propertyItems.size()-1]->setText(0, prop.name); //sets the text of the item 
      propertyItems[propertyItems.size()-1]->setText(1, prop.value);//set the text of the other item 
      propertyItems[propertyItems.size()-1]->setFlags(Qt::ItemIsEditable); 
      ui->treeWidget_3->insertTopLevelItem(ui->treeWidget_3->topLevelItemCount(), propertyItems[propertyItems.size()-1]); //appends the items 
      counter ++; 

void MainWindow::onTreeWidget3ItemDoubleClicked() 
{ 
    if (ui->treeWidget_3->currentColumn() == 2) { 
     ui->treeWidget_3->editItem(ui->treeWidget_3->currentItem(), ui->treeWidget_3->currentColumn()); 
    } 
} 

私のアプローチです。 ontreeWidget3ItemDoubleClickedtreeWidget::doubleClicked、treeWidget_3はNO edit-triggers

ですが、私がプログラムを実行すると、QTreeViewはグレー表示になります。

前記、私も

propertyItems[propertyItems.size()-1]->setFlags(propertyItems[propertyItem.size()].flags | Qt::ItemIsEditable); 

を試してみましたtreeWidget_3が、私はこの問題を解決するにはどうすればよい...

をもうオフグレー表示が、それはまだ編集できないではないですか?

BTW:私はQtの新作ですので、何かを忘れてしまったかもしれません。この場合は申し訳ありません。

答えて

1

documentationで述べたように:

QTreeWidgetItemクラスはQTreeWidgetコンビニエンスクラスで使用するための項目を提供します。

これは、すべてのユースケースで機能しないことを意味します。解決策は、独自のモデルを作成し、appropriate values(読み取り専用列の場合は基本的にQt:: ItemIsEnabled、編集可能な列の場合はQt:: ItemIsEnabled | Qt::ItemIsEditable)を返すflags(const QModelIndex& index)メソッドをオーバーロードすることです。列はindex.column()から取得できます。

Qtはツリーとモデルで始まるexampleを提供します。

+0

言い換えれば、他の質問で受け入れられた解決策はこれに答えますが、独自のモデルを使用するには、 'QTreeWidget'から' QTreeView'に変更する必要があります。 – cbuchart

+0

ok、ありがとう;)それは今働きます – ThefrenchSpeedruns

+0

あなたを助けてうれしい! – cbuchart

関連する問題