4

私は Qt でプログラミングを始めてconnectおり、コードが読みやすくなるようにコード内のどこにステートメントを記述するかについてのベスト プラクティスを探しています。

現在の観点からは、任意の場所で定義するconnectと (任意の場所が機能上の違いを意味しない場合)、非常に読みにくいコードになる可能性があるようです。

connect現在、 SLOTS を含むクラスのコンストラクターでステートメントを定義する最も直感的な方法を見つけました。

標準または推奨されるベスト プラクティスはありますか?

4

1 に答える 1

1

初期化のために、レイアウトの「メイン」部分ごとに関数を用意するのが好きです。以下はコンストラクタの例です。各create関数は、グループ ボックス ウィジェットを返します。

MissionConfiguration::MissionConfiguration(QWidget* parent) : QWidget(parent) 
{
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(createMissionConfigurationGroupBox());
    layout->addWidget(createNetAcquireGroupBox());
    layout->addWidget(createSystemStatus());
    layout->addWidget(createStatusButtons());
    setLayout(layout);
}

これらの「作成」関数のそれぞれで、適切な信号/スロットが接続されます。ウィジェットが複雑な場合に、物事を整理しておくのに役立ちます。

createStatusButtons関数の例を次に示します。

QGroupBox* MissionConfiguration::createStatusButtons() {
    // on the qbutton status
    QGroupBox *runModes = new QGroupBox(tr("Run Modes"));
    QHBoxLayout *runModeLayout = new QHBoxLayout;

    live = new QRadioButton(tr("Live"));
    playback = new QRadioButton(tr("Playback"));
    simulation = new QRadioButton(tr("Simulation"));
    QPushButton *logout = new QPushButton("Logout");

    simulation->setChecked(true);

    connect(recorder, SIGNAL(isConnected(bool)), live, SLOT(setEnabled(bool)));
    connect(recorder, SIGNAL(isConnected(bool)), playback, SLOT(setEnabled(bool)));
    connect(logout, SIGNAL(clicked()), this, SLOT(logout()));

    runModeLayout->addWidget(live);
    runModeLayout->addWidget(playback);
    runModeLayout->addWidget(simulation);
    runModeLayout->addWidget(logout);
    runModes->setLayout(runModeLayout);
    return runModes;
}

本当に、「最善の」方法は、それが好きで、覚えやすいことです。理解できるイディオムを考え出すことをお勧めします。そうすれば、将来コードを編集する必要がある場合に、どこを見ればよいかがわかります。

于 2013-10-17T13:05:25.747 に答える