我正在与 Qt 战斗。无法为我的具体问题找到可靠的解决方案。
我们的习惯class MyWidget
必须:
- 派生自
QWidget
重写closeEvent
方法 - 具有必须在构造函数中初始化的字段
问题:
QWidget
的胆量QUiLoader
从.ui
文件初始化。所以我只有QWidget*
指针QWidget
是不可复制的。QWidget
没有移动构造函数
代码(为简单起见,省略了错误检查和内存管理):
class MyWidget : public QWidget
{
bool m_Closed;
public:
MyWidget(QWidget* qw) :
QWidget(*qw), // error: copy constructor is private
m_Closed(false)
{}
bool IsClosed() const { return m_Closed; }
virtual void closeEvent(QCloseEvent *) override { m_Closed = true; }
};
QFile file("main.ui");
QUiLoader uiLoader;
MyWidget* uiMain = new MyWidget(uiLoader.load(&file));
uiMain->show();
问题:
- 我该如何解决这个问题?我觉得解决方案很简单。
- 我可以在这里以某种方式使用移动语义吗?
注意:
- 我不能成为
QWidget
成员,因为我需要覆盖它的方法。 - 也许,我可以做一些
MyWidget::Init()
方法来初始化那些bool
标志,每次实例化后都必须调用它。但我发现这个解决方案不可靠。 - 最后,我必须有
QWidget
,我可以检查它是否已关闭(也许你知道另一种简单的方法) - 我使用 MSVC 2013 RC 和 GCC 4.8.1,所以 C++11 解决方案会很棒
不要犹豫,我感谢任何建议和批评。