在创建窗口小部件时,将QtCreator设置为默认值,它的类会将窗体创建为类的私有窗体。所以你有这样的事情:
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
//...
private:
Ui::MainWindow *ui;
};
现在我想知道的是你如何连接ui
内的信号。例如,如果此窗口小部件嵌入到QStackedWidget中,并且按下按钮时,显示的页面需要更改。我会考虑连接到按钮,但ui
是私有的,所以我不能。
我是否必须在MainWindow
中创建信号,然后在其中将'ui'信号连接到它们,从而冒出层次结构?或者我错过了一些简单的东西?
答案 0 :(得分:3)
你不能让一个不相关的对象连接到聚合组件的信号/插槽,即使你可能会破坏封装并成为维护的噩梦。
您需要通过将聚合组件的信号/插槽添加到MainWindow
API来公开它们,然后在定义中调用相对ui
组件方法。
例如,在MainWindow
定义中,添加:
signals:
void buttonClicked();
然后在构造函数中,执行:
connect( ui->button, SIGNAL( clicked() ), this, SIGNAL( buttonClicked() ) );
这样,你的MainWindow
类传播来自它的聚合的信号 - 但是精确到了你打算如何使用这个类。