【发布时间】:2012-11-05 16:38:29
【问题描述】:
也就是说,通过右键单击小部件并选择“转到插槽...”来创建插槽。
示例 1,此方法有效:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
这不是,因为显然设计者在寻找 Ui::MainWindow* 并且如果找不到它就完全吓坏了(得到“找不到包含'Ui::MainWindow'的类......” )
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <memory>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
std::unique_ptr<Ui::MainWindow> ui;
};
#endif // MAINWINDOW_H
我基本上是在寻找一种方法来告诉 Qt“是的,我真的是说那个类。我知道它不包含 Ui::MainWindow*,没关系,一切都会好起来的......”。除非我错了,并且该类出于某种原因实际上需要将其作为普通指针。
【问题讨论】:
-
Qt 中的 UI 设计器是一个非常原始的工具,它假定您的项目是以标准方式组织的。为什么你需要使用 STL 智能指针,当 Qt 有它自己并且已经被使用时?
-
@divanov 我不需要使用标准智能指针,我想要使用它们。 “Qt 中的 UI 设计器是一个非常原始的工具”——在这种情况下,我希望它是 more 可配置的,而不是更少的。无论如何,
QScopedPointer也会窒息。 -
UI 设计师的代码关心内存管理,如果你想使用作用域指针,那肯定是有原因的。
-
@divanov 智能指针强迫症?我正在尝试在我的脑海中刻上“我是 the 所有者,所以它进入一个 unique_ptr”的模式,如果没有令人信服的理由,我宁愿不违反它。当然,破坏我的工具是一个足够令人信服的理由,这就是为什么我要问我是否以及如何让设计师参与进来。
-
@Cubic,在您提出问题 4 年后,我仍然遇到同样的问题。我想知道是否有人找到了解决方案。
标签: c++ qt c++11 qt-creator