gpt4 book ai didi

c++ - 如何从 QDialog 的 const 方法显示 QMessageBox?

转载 作者:太空狗 更新时间:2023-10-29 22:54:11 26 4
gpt4 key购买 nike

我已经子类化了 QDialog 并且我创建了一个 const 方法,因为我绝对想防止修改我的实例。现在,如果发生某个错误,我想使用 QMessageBox 来显示它。但是我不能使用 this 作为消息框的父级,因为 thisconst

这是一个遗憾。根据文档 (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/

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