gpt4 book ai didi

c++ - 如何在 Qt 中取消设置标志?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:48 24 4
gpt4 key购买 nike

我正在使用以下代码禁用对 QTableWidget 中单元格的编辑。

ui->tableWidget_1->item(row,col)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

这很好用。我不明白如何撤消此操作,即如何使单元格再次可编辑?

我已经尝试再次调用该函数以防切换它。我试过调用相同的函数,但在别处看到的标志前面有一个 ~ 。我不确定我是否真的了解标志在 Qt 中的工作原理。

最佳答案

Item flags只是整数的位。要设置或取消设置标志,您需要获取该数字:

auto currentFlags = ui->tableWidget_1->item(row,col)->flags();

并分别向所需位置写入 1 或 0,其他位保持不变。例如,要启用编辑功能,您可以执行以下操作:

auto currentFlags = ui->tableWidget_1->item(row,col)->flags();
ui->tableWidget_1->item(row,col)->setFlags(currentFlags | Qt::ItemIsEditable‌);

类似地,此代码禁用编辑:

auto currentFlags = ui->tableWidget_1->item(row,col)->flags();
ui->tableWidget_1->item(row,col)->setFlags(currentFlags & (~Qt::ItemIsEditable‌));

按位或运算允许您一次设置多个标志。您的示例之所以有效,是因为设置 Qt::ItemIsSelectable|Qt::ItemIsEnabledQt::ItemIsEditable‌ 标志的位置留下零,因为它在除指定标志之外的任何地方都留下零。 setFlags 不会将更多标志提升为一个,它只是用指定的标志完全覆盖所有标志。

这不仅是标志在 Qt 中的工作方式,也是按位运算在 C++ 中的一般工作方式。大多数 API(包括 Qt)只是使用这种行为来实现标志抽象。

关于c++ - 如何在 Qt 中取消设置标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45413555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com