70

1 つの列を編集不可QTableWidget したいと考えています。
フォーラムでは、いくつかについて多くのことを読みましたがflags、実装できませんでした。

4

4 に答える 4

101

次の種類の項目を QTableWidget に挿入します。

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

正常に動作します!

編集:

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);

これはより良い解決策です。@priomsrb に感謝します。

于 2010-04-04T10:12:05.527 に答える
50

XOR を使用した結果は、現在の状態によって異なります。使用することをお勧めします

item->setFlags(item->flags() &  ~Qt::ItemIsEditable);

現在の設定に関係なく、編集がオフになっていることを確認します。

于 2013-10-26T17:14:55.500 に答える
2

cellDoubleClicked シグナルを新しい SLOT で上書きするだけです。これは、どのセルも変更したくない場合です

于 2014-07-30T13:50:22.213 に答える
0

@Narek のコードを行または列に適用するには、単純な for ループを使用し、編集可能にしたくない行/列のフラグを含める条件を挿入します。

次のコードは、csv ファイルを QTableWidget に読み込みます。

if(!rowOfData.isEmpty()){
for (int x = 0; x < rowOfData.size(); x++)
    {
        rowData = rowOfData.at(x).split(",");
        if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x);
        for (int y = 0; y < rowData.size(); y++)
        {
            QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type);
            if( y < 3 ) item->setFlags(item->flags() ^ Qt::ItemIsEditable);   // Only disables the first three columns for editing, but allows the rest of the columns to be edited
            ui->table_Data->setItem(x,y,item);
            ui->table_Data->repaint();
        }
    }
}
于 2014-06-16T19:56:02.740 に答える