0

当您创建一个小部件时,QtCreator 设置为默认设置,它的类将表单创建为该类的私有。所以你有例如这样的东西:

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

//...

private:
    Ui::MainWindow *ui;
};

现在我想知道的是如何连接到ui. 例如,如果这个小部件被嵌入到 QStackedWidget 中,并且当按下按钮时,显示的页面需要更改。我会考虑连接到按钮,但ui它是私人的,所以我不能。

我是否必须在其中创建信号,MainWindow然后在其中将“ui”信号连接到它们,从而使层次结构冒泡?还是我错过了一些简单的事情?

4

1 回答 1

3

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

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

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

signals:
    void buttonClicked();

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

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

这样,您的MainWindow类就可以从它的聚合中传播信号 - 但可以精确调整到您打算如何使用该类。

于 2012-05-30T06:39:42.033 回答