初期化のために、レイアウトの「メイン」部分ごとに関数を用意するのが好きです。以下はコンストラクタの例です。各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;
}
本当に、「最善の」方法は、それが好きで、覚えやすいことです。理解できるイディオムを考え出すことをお勧めします。そうすれば、将来コードを編集する必要がある場合に、どこを見ればよいかがわかります。