我继承了QDialog
的子类,并且创建了const
方法,因为我想绝对防止修改实例。现在,如果发生某些错误,我想使用QMessageBox
来显示它。但是我不能使用this
作为消息框的父对象,因为this
是const
。
这很可惜。根据文档(https://doc.qt.io/qt-5/qdialog.html#QDialog),父级会影响新对话框的默认位置以及它是否共享父级任务栏条目。为此,父母是否必须非const
??
我看到了三个选择,但都不是一个很好的选择:
const_cast
(在这种常见情况下使用const_cast
对于我来说似乎很奇怪)nullptr
作为父级(很丑,因为消息框的位置更糟)当Qt要求父窗口小部件可修改时,它不是const正确的吗?还有比const_cast
更好的解决方案吗?
答案 0 :(得分:1)
引入2019-03-12T16:02:00(+00:00)
方法的原因之一是区分数据强制转换,并同时保护数据免受不必要的强制转换,并使代码更易于阅读和在代码中搜索。
操作员..._cast
正是您的任务。方法中的标记const_cast
表示您的操作将不会修改任何对象状态数据。但是,使警报对话框或任何窗口都需要修改操作系统和应用程序内部数据中的许多状态。这就是为什么它不是常数的原因。
但是,“关闭并关闭警报”对话框不会更改对象数据中的任何状态,并且与您的任务无关。因此,从角度来看,操作系统和应用程序状态管理创建对话框不是const。但是从您在应用程序中解决的任务的角度来看,警报对话框的外观是一个const操作。
因此const
正是您需要将相交的不同任务合并在一起的原因。