连接到私人小部件的信号

时间:2012-05-30 05:59:00

标签: qt

在创建窗口小部件时,将QtCreator设置为默认值,它的类会将窗体创建为类的私有窗体。所以你有这样的事情:

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

//...

private:
    Ui::MainWindow *ui;
};

现在我想知道的是你如何连接ui内的信号。例如,如果此窗口小部件嵌入到QStackedWidget中,并且按下按钮时,显示的页面需要更改。我会考虑连接到按钮,但ui是私有的,所以我不能。

我是否必须在MainWindow中创建信号,然后在其中将'ui'信号连接到它们,从而冒出层次结构?或者我错过了一些简单的东西?

1 个答案:

答案 0 :(得分:3)

你不能让一个不相关的对象连接到聚合组件的信号/插槽,即使你可能会破坏封装并成为维护的噩梦。

您需要通过将聚合组件的信号/插槽添加到MainWindow API来公开它们,然后在定义中调用相对ui组件方法。

例如,在MainWindow定义中,添加:

signals:
    void buttonClicked();

然后在构造函数中,执行:

connect( ui->button, SIGNAL( clicked() ), this, SIGNAL( buttonClicked() ) );

这样,你的MainWindow类传播来自它的聚合的信号 - 但是精确到了你打算如何使用这个类。