如何使QTableWidget中的列只读?

问题描述 投票:0回答:5

我想在

QTableWidget
NOT 中有一栏可编辑。
在论坛中,我读了很多关于一些
flags
的内容,但无法实施。

qt qt4 qtablewidget
5个回答
113
投票

在 QTableWidget 中插入以下项目:

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

工作正常!

编辑:

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

这是一个更好的解决方案。感谢@priomsrb。


54
投票

使用 XOR 的结果取决于当前状态。我建议使用

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

确保无论当前设置如何,编辑都会关闭。


2
投票

我提出了一个更好的建议,只需用新的 SLOT 覆盖 cellDoubleClicked 信号即可。 这是,如果您不想修改任何单元格


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();
        }
    }
}

0
投票

使用它使整个小部件只读:

tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

© www.soinside.com 2019 - 2024. All rights reserved.