QT手写显示控件如QDockWidget,QTabWidget,QGroupBox组合

在 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();
}

代码解释

  1. 创建主窗口 :MainWindow 继承自 QMainWindow,是主应用程序窗口。

  2. 设置中央小部件 :创建一个 QWidget 并将其设置为主窗口的中央小部件。

  3. 创建 QDockWidget:

    • 使用 QDockWidget 创建一个停靠窗口,并将其添加到主窗口的左侧区域。
  4. 创建 QTabWidget:

    • 在 QDockWidget 中创建一个 QTabWidget 并设置为停靠窗口的内容。
  5. 创建第一个选项卡:

    • 创建一个 QWidget 作为第一个选项卡,并将其添加到 QTabWidget。
  6. 配置布局:

    • 在选项卡上创建一个 QVBoxLayout,用于垂直排列 QGroupBox。
    • 创建四个 QGroupBox,并将它们添加到垂直布局中。
    • 每个 QGroupBox 中使用 QGridLayout 进行内部布局。
  7. 添加控件到每个 QGroupBox:

    • 每个 QGroupBox 内部包含五个 QPushButton、一个 QLabel 和两个 QLineEdit。
    • 使用 QGridLayout 将这些控件按网格排列:按钮在第一列,标签和输入框在第二列的不同位置。
相关推荐
code2cat2 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除
CappuccinoRose2 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
Zguigo2 小时前
【CUDA8】第一个CUDA C++ Kernel --vector add
java·开发语言·c++
-Marks-2 小时前
【C++编程】STL容器(二)--- vector底层模拟实现(常用接口实现 | 扩容机制 | 深浅拷贝 | 迭代器失效)
开发语言·c++·vector·内存管理·迭代器失效·vector底层模拟实现
Shadow(⊙o⊙)3 小时前
C++11并发支持库
开发语言·c++
一技安身3 小时前
【java】JDK8 + JDK17 绿色解压共存方案-全程不修改任何系统环境变量
java·开发语言
hudd6684 小时前
JavaEE 初阶 - 多线程(初阶)
java·开发语言·java-ee
I Am a robert girl4 小时前
稀有事件估计的迭代去对齐:从源码视角拆解重要性采样新范式
开发语言·python·机器学习·重要性采样·蒙特卡洛方法·稀有事件估计
golang学习记4 小时前
rust开发,选VS Code还是RustRover?
开发语言·后端·rust
打工仔折腾 AI4 小时前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战