ウィジェット・チュートリアル - 入れ子のレイアウト

ウィジェットが他のウィジェットを含むことができるように、レイアウトを使用してウィジェットを異なるレベルでグループ化することができます。ここでは、クエリの結果を表示するテーブルビューの上に、ウィンドウの上部にライン編集と一緒にラベルを表示します。

queryLayout は、QLabelQLineEdit ウィジェットを横に並べたQHBoxLayout であり、mainLayout は、queryLayoutQTableView を縦に並べたQVBoxLayout である。

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget window;

    QLabel *queryLabel = new QLabel(
        QApplication::translate("nestedlayouts", "Query:"));
    QLineEdit *queryEdit = new QLineEdit();
    QTableView *resultView = new QTableView();

    QHBoxLayout *queryLayout = new QHBoxLayout();
    queryLayout->addWidget(queryLabel);
    queryLayout->addWidget(queryEdit);

    QVBoxLayout *mainLayout = new QVBoxLayout();
    mainLayout->addLayout(queryLayout);
    mainLayout->addWidget(resultView);
    window.setLayout(mainLayout);

    // Set up the model and configure the view...
    window.setWindowTitle(
        QApplication::translate("nestedlayouts", "Nested layouts"));
    window.show();
    return app.exec();
}

resultView テーブルの上にqueryLayout を挿入するために、mainLayoutaddLayout() 関数を呼び出していることに注意してください。

QTableView ウィジェットresultView で表示されるデータを含むモデルをセットアップするコードは省略しました。完全性を期すため、以下にこれを示します。

QHBoxLayoutQVBoxLayout だけでなく、Qt はより複雑なユーザー・インタフェースをサポートするためにQGridLayoutQFormLayout クラスも提供しています。これらはQt Widgets Designerを実行すると見ることができます。

モデルのセットアップ

上記のコードでは、レイアウトの使用に集中したかったので、テーブルのデータがどこから来たかを示しませんでした。ここでは、モデルが行に対応するいくつかの項目を保持し、それぞれが2つの列のデータを含むように設定されていることがわかります。

    QStandardItemModel model;
    model.setHorizontalHeaderLabels({ QApplication::translate("nestedlayouts", "Name"),
                                      QApplication::translate("nestedlayouts", "Office") });

    const QStringList rows[] = {
        QStringList{ QStringLiteral("Verne Nilsen"), QStringLiteral("123") },
        QStringList{ QStringLiteral("Carlos Tang"), QStringLiteral("77") },
        QStringList{ QStringLiteral("Bronwyn Hawcroft"), QStringLiteral("119") },
        QStringList{ QStringLiteral("Alessandro Hanssen"), QStringLiteral("32") },
        QStringList{ QStringLiteral("Andrew John Bakken"), QStringLiteral("54") },
        QStringList{ QStringLiteral("Vanessa Weatherley"), QStringLiteral("85") },
        QStringList{ QStringLiteral("Rebecca Dickens"), QStringLiteral("17") },
        QStringList{ QStringLiteral("David Bradley"), QStringLiteral("42") },
        QStringList{ QStringLiteral("Knut Walters"), QStringLiteral("25") },
        QStringList{ QStringLiteral("Andrea Jones"), QStringLiteral("34") }
    };

    QList<QStandardItem *> items;
    for (const QStringList &row : rows) {
        items.clear();
        for (const QString &text : row)
            items.append(new QStandardItem(text));
        model.appendRow(items);
    }

    resultView->setModel(&model);
    resultView->verticalHeader()->hide();
    resultView->horizontalHeader()->setStretchLastSection(true);

モデルとビューの使用については、アイテムビューの例と モデル/ビュープログラミングの概要で説明しています。

プロジェクト例 @ code.qt.io

このドキュメントに含まれるコントリビューションの著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。