在 Qt 中,你可以在 QDockWidget
中添加一个 QTabWidget
,然后在其中一个选项卡上添加多个 QGroupBox
。每个 QGroupBox
中包含几个 QPushButton
、一个 QLabel
和两个 QLineEdit
,并使用 QGridLayout
布局来排列这些控件。
以下是一个完整的示例代码,展示了如何实现这个布局:
cpp
#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QTabWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
class MainWindow : public QMainWindow {
public:
MainWindow() {
// Create central widget and set it as the central widget for the main window
QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
// Create a QDockWidget
QDockWidget *dockWidget = new QDockWidget("Dock Widget", this);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
// Create a QTabWidget and set it to the dock widget
QTabWidget *tabWidget = new QTabWidget(dockWidget);
dockWidget->setWidget(tabWidget);
// Create the first tab
QWidget *firstTab = new QWidget(tabWidget);
tabWidget->addTab(firstTab, "First Tab");
// Create a vertical layout for the first tab
QVBoxLayout *vboxLayout = new QVBoxLayout(firstTab);
// Add four QGroupBox widgets to the vertical layout
for (int i = 0; i < 4; ++i) {
QGroupBox *groupBox = new QGroupBox(QString("Group Box %1").arg(i + 1), firstTab);
vboxLayout->addWidget(groupBox);
// Create a QGridLayout for the group box
QGridLayout *gridLayout = new QGridLayout(groupBox);
// Add buttons, label, and line edits to the grid layout
for (int j = 0; j < 5; ++j) {
QPushButton *button = new QPushButton(QString("Button %1").arg(j + 1), groupBox);
gridLayout->addWidget(button, j, 0); // Buttons in the first column
}
QLabel *label = new QLabel(QString("Label %1").arg(i + 1), groupBox);
gridLayout->addWidget(label, 0, 1); // Label in the first row, second column
QLineEdit *lineEdit1 = new QLineEdit(groupBox);
gridLayout->addWidget(lineEdit1, 1, 1); // Line Edit 1 in the second row, second column
QLineEdit *lineEdit2 = new QLineEdit(groupBox);
gridLayout->addWidget(lineEdit2, 2, 1); // Line Edit 2 in the third row, second column
}
setWindowTitle("QDockWidget with QTabWidget Example");
resize(800, 600);
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
代码解释
-
创建主窗口 :
MainWindow
继承自QMainWindow
,是主应用程序窗口。 -
设置中央小部件 :创建一个
QWidget
并将其设置为主窗口的中央小部件。 -
创建
QDockWidget
:- 使用
QDockWidget
创建一个停靠窗口,并将其添加到主窗口的左侧区域。
- 使用
-
创建
QTabWidget
:- 在
QDockWidget
中创建一个QTabWidget
并设置为停靠窗口的内容。
- 在
-
创建第一个选项卡:
- 创建一个
QWidget
作为第一个选项卡,并将其添加到QTabWidget
。
- 创建一个
-
配置布局:
- 在选项卡上创建一个
QVBoxLayout
,用于垂直排列QGroupBox
。 - 创建四个
QGroupBox
,并将它们添加到垂直布局中。 - 每个
QGroupBox
中使用QGridLayout
进行内部布局。
- 在选项卡上创建一个
-
添加控件到每个
QGroupBox
:- 每个
QGroupBox
内部包含五个QPushButton
、一个QLabel
和两个QLineEdit
。 - 使用
QGridLayout
将这些控件按网格排列:按钮在第一列,标签和输入框在第二列的不同位置。
- 每个