作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用以下代码禁用对 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::ItemIsEnabled
在 Qt::ItemIsEditable
标志的位置留下零,因为它在除指定标志之外的任何地方都留下零。 setFlags
不会将更多标志提升为一个,它只是用指定的标志完全覆盖所有标志。
这不仅是标志在 Qt 中的工作方式,也是按位运算在 C++ 中的一般工作方式。大多数 API(包括 Qt)只是使用这种行为来实现标志抽象。
关于c++ - 如何在 Qt 中取消设置标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45413555/
我是一名优秀的程序员,十分优秀!