小部件教程 - 嵌套布局
正如控件可以包含其他控件一样,布局也可用于为控件提供不同层级的分组。在此,我们希望在窗口顶部、显示查询结果的表格视图上方,将一个标签与一个行编辑控件并排显示。
我们通过创建两个布局来实现这一点:queryLayout 是一个QHBoxLayout ,其中包含并排放置的QLabel 和QLineEdit 控件;mainLayout 是一个QVBoxLayout ,其中包含queryLayout 和QTableView ,并以垂直方式排列。
| ![]() |
请注意,我们调用了mainLayout 的addLayout()函数,将queryLayout 插入到resultView 表格上方。
我们省略了用于设置包含QTableView 控件所显示数据的模型resultView 的代码。为完整起见,我们将在下面展示该代码。
除了QHBoxLayout 和QVBoxLayout 之外,Qt 还提供了QGridLayout 和QFormLayout 类,以帮助实现更复杂的用户界面。运行Qt Widgets Designer 即可查看这些示例。
设置模型
在上面的代码中,我们没有显示表格数据的来源,因为我们希望专注于布局的使用。在这里,我们可以看到模型中包含与行数相对应的多个项目,每个项目都设置为包含两列的数据。
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);© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
