web-dev-qa-db-ja.com

QTableWidgetの列を読み取り専用にする方法

QTableWidget[〜#〜] not [〜#〜]に1つの列が必要です。
フォーラムでは、いくつかのflagsについて多くのことを読みましたが、実装することができませんでした。

58
Narek

次の種類のアイテムをQTableWidgetに挿入します。

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

正常に動作します!

編集:

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

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

89
Narek

XORを使用した結果は、現在の状態が何であるかによって異なります。

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

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

37
user2923436

私はより良い提案に来ました。cellDoubleClicked信号を新しいSLOTで上書きするだけです。これは、どのセルも変更したくない場合です

1
Damdidam

@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();
        }
    }
}
0
Tim Hutchison