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 に答える