- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经子类化了 QDialog
并且我创建了一个 const
方法,因为我绝对想防止修改我的实例。现在,如果发生某个错误,我想使用 QMessageBox
来显示它。但是我不能使用 this
作为消息框的父级,因为 this
是 const
。
这是一个遗憾。根据文档 (https://doc.qt.io/qt-5/qdialog.html#QDialog),父级影响新对话框的默认位置以及它是否共享父级的任务栏条目。父级是否必须是非 const
的...?
我看到了三个选项,但没有一个明显出色:
const_cast
(在这种常见情况下使用 const_cast
对我来说似乎很奇怪)nullptr
作为父级(丑陋,因为消息框位置更差)当 Qt 要求父窗口小部件可修改时,它不是常量正确的吗?还有比 const_cast
更好的解决方案吗?
最佳答案
引入..._cast
方法的原因之一是区分数据强制转换,同时防止不必要的强制转换,并使代码更具可读性和易于在代码中搜索。
Operator const_cast
正是您需要的东西。方法中的 const
标记表示您的操作不会修改任何对象状态数据。然而,制作警报对话框或任何窗口需要修改操作系统和应用程序内部数据中的许多状态。这就是为什么它不是常量操作的原因。
但是,应用程序和关闭警报对话框不会更改对象数据的任何状态,并且与您的任务无关。因此,从操作系统和应用程序状态管理的角度来看,创建对话框不是常量。但是从您在应用程序中解决的任务的角度来看,警报对话框的外观是一个常量操作。
因此,const_cast
正是您在不同任务相交的地方加入它们所需要的。
关于c++ - 如何从 QDialog 的 const 方法显示 QMessageBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56988898/
我是一名优秀的程序员,十分优秀!