【问题标题】:How to make a column in QTableWidget read only?如何使 QTableWidget 中的列只读?
【发布时间】:2011-02-04 04:06:34
【问题描述】:

我希望QTableWidget 中的一列不可可编辑。
在论坛中,我阅读了很多关于 flags 的内容,但无法实施。

【问题讨论】:

    标签: qt qt4 qtablewidget


    【解决方案1】:

    在 QTableWidget 中插入以下类型的项目:

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

    工作正常!

    编辑:

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

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

    【讨论】:

    • 最好使用item->setFlags(item->flags() ^ Qt::ItemIsEditable);。这将使其他标志保持不变
    • @priomsrb 为什么按照 user2923436 的建议使用异或(XOR)而不是 item->flags() & ~Qt::ItemIsEditable? XOR 的结果取决于标志的默认状态。
    • @m7913d 我认为你是对的。我的解决方案只是切换可编辑状态。因此,如果该项目已经是只读的,它将无法工作。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我尝试了你的这个解决方案,但它不起作用:编译器抱怨'~'。
    • ~ 是按位取反,所有编译器都应该支持。
    【解决方案3】:

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

    【讨论】:

    • 不需要这样做,这就是我们有项目标志的原因。只需一行即可解决他的问题。
    • 不同之处在于您必须从他所有子项的位图中排除标志?。如果您希望整个小部件为只读,我的建议是排除使用 &~ 位图标志写入 20 行。其实我的评论是错误的,应该说断开 cellDoubleClicked 信号
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2020-09-22
      • 2015-12-12
      • 2021-11-14
      相关资源
      最近更新 更多