Qt水平レイアウトの実装と応用例

Qtの水平レイアウト管理器であるQHBoxLayoutは、GUIアプリケーションの要素を効率的に整列させるための基盤技術です。本記事では、実践的なコード例を通じてレイアウトの構築方法と動的調整技術を解説します。

#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QWidget main_window;
    main_window.setWindowTitle("水平配置サンプル");

    QHBoxLayout *main_layout = new QHBoxLayout(&main_window);
    main_layout->setSpacing(12); // コントロール間隔を12pxに設定

    QPushButton *confirm_btn = new QPushButton("確定");
    QPushButton *cancel_btn = new QPushButton("キャンセル");
    QPushButton *reset_btn = new QPushButton("リセット");

    main_layout->addWidget(confirm_btn);
    main_layout->addWidget(cancel_btn);
    main_layout->addWidget(reset_btn);

    main_window.setLayout(main_layout);
    main_window.show();

    return app.exec();
}

この例では、QHBoxLayoutをウィンドウに直接関連付け、addWidget()でボタンを水平に配置しています。setSpacing()でコントロール間のスペースを調整し、ウィンドウサイズ変更時に自動的に適応するレイアウトを実現しています。

レイアウトの詳細設定には、以下のようなメソッドが利用可能です:

  • setAlignment(Qt::AlignHCenter):水平方向中央寄せ
  • setContentsMargins(20, 15, 20, 15):コンテンツ周囲の余白設定
  • insertWidget(1, new QPushButton("追加")):特定位置への動的追加

複雑なUI構築にはレイアウトのネストが有効です。垂直レイアウト内に水平レイアウトを組み込む例:

QVBoxLayout *parent_layout = new QVBoxLayout();
QHBoxLayout *header_layout = new QHBoxLayout();

header_layout->addWidget(new QLabel("ユーザ名:"));
header_layout->addWidget(new QLineEdit());

parent_layout->addLayout(header_layout);
parent_layout->addWidget(new QPushButton("送信"));

QWidget *container = new QWidget();
container->setLayout(parent_layout);

Qt Designerを用いた可視化設計では、ツールバーからコントロールをドラッグし、プロパティエディタで間隔やアラインメントを調整できます。生成された.uiファイルはuicツールでC++コードに変換され、プロジェクトに統合されます。

シグナルとスロットを活用したイベント処理例:

QObject::connect(send_btn, &QPushButton::clicked, 
    [=]() { 
        qDebug() << "送信ボタンがクリックされました"; 
    });

このように、QHBoxLayoutを適切に組み合わせることで、レスポンシブなUIを効率的に実装できます。レイアウト管理の理解は、Qtアプリケーション開発の基盤となる重要なスキルです。

タグ: Qt QHBoxLayout GUI設計 レイアウト管理 C++

6月21日 22:23 投稿