Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解

server/2025/1/17 14:03:13/
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

Qt布局系统(Layouts)

布局管理器基础

高级布局技巧

嵌套布局

设置间距和边距

常用控件详解

按钮类控件

QPushButton (标准按钮)

QRadioButton (单选按钮)

QCheckBox (复选框)

输入类控件

QLineEdit (单行输入)

QTextEdit (多行输入)

QSpinBox (数值输入)

显示类控件

QLabel (标签)

QProgressBar (进度条)

高级视图控件

Model-Based Views

QListView

QTreeView

Item-Based Widgets

QListWidget

QTableWidget

容器控件

QGroupBox

QTabWidget

QScrollArea

样式和外观

样式表

属性设置


Qt布局系统(Layouts)

布局管理器基础

Qt提供了强大的布局管理系统,用于自动管理控件的大小和位置。主要布局管理器包括:

  1. QHBoxLayout (水平布局)
    QHBoxLayout* hLayout = new QHBoxLayout;hLayout->addWidget(new QPushButton("按钮1"));hLayout->addWidget(new QPushButton("按钮2"));hLayout->addWidget(new QPushButton("按钮3"));this->setLayout(hLayout);

  1. QVBoxLayout (垂直布局)
    QVBoxLayout* vLayout = new QVBoxLayout;vLayout->addWidget(new QLabel("标签1"));vLayout->addWidget(new QLabel("标签2"));vLayout->addWidget(new QLabel("标签3"));this->setLayout(vLayout);

  1. QGridLayout (网格布局)
    QGridLayout* gridLayout = new QGridLayout;gridLayout->addWidget(new QPushButton("1"), 0, 0);gridLayout->addWidget(new QPushButton("2"), 0, 1);gridLayout->addWidget(new QPushButton("3"), 1, 0, 1, 2); // 跨列this->setLayout(gridLayout);

  1. QFormLayout (表单布局)
QFormLayout* formLayout = new QFormLayout;formLayout->addRow("姓名:", new QLineEdit);formLayout->addRow("年龄:", new QSpinBox);formLayout->addRow("简介:", new QTextEdit);this->setLayout(formLayout);

高级布局技巧

嵌套布局
    QVBoxLayout* mainLayout = new QVBoxLayout;QHBoxLayout* topLayout = new QHBoxLayout;topLayout->addWidget(new QPushButton("左"));topLayout->addWidget(new QPushButton("中"));topLayout->addWidget(new QPushButton("右"));mainLayout->addLayout(topLayout);mainLayout->addWidget(new QTextEdit);this->setLayout(mainLayout);
设置间距和边距
layout->setSpacing(10);              // 控件间距  
layout->setContentsMargins(10,10,10,10); // 边距

常用控件详解

按钮类控件

QPushButton (标准按钮)
QPushButton* btn = new QPushButton("点击我");  
btn->setIcon(QIcon(":/icons/click.png"));  
QRadioButton (单选按钮)
  // 创建按钮组QButtonGroup* group = new QButtonGroup(this);// 创建单选按钮QRadioButton* radio1 = new QRadioButton("选项1", this);QRadioButton* radio2 = new QRadioButton("选项2", this);// 将按钮添加到按钮组group->addButton(radio1);group->addButton(radio2);// 创建垂直布局QVBoxLayout* layout = new QVBoxLayout;// 将单选按钮添加到布局中layout->addWidget(radio1);layout->addWidget(radio2);// 设置布局setLayout(layout);
QCheckBox (复选框)
    QCheckBox* check = new QCheckBox("同意条款", this);connect(check, &QCheckBox::stateChanged, this, [](int state){qDebug() << "状态变更:" << state;});

输入类控件

QLineEdit (单行输入)
    QLineEdit* lineEdit = new QLineEdit(this);lineEdit->setPlaceholderText("请输入用户名");lineEdit->setMaxLength(20);
QTextEdit (多行输入)
    QTextEdit* textEdit = new QTextEdit(this);textEdit->setPlaceholderText("请输入描述");textEdit->setAcceptRichText(true);
QSpinBox (数值输入)
    QSpinBox* spinBox = new QSpinBox(this);spinBox->setRange(0, 100);spinBox->setSingleStep(5);spinBox->setValue(50);

显示类控件

QLabel (标签)
    QLabel* label = new QLabel(this);label->setText("Hello <b>Qt</b>");label->setTextFormat(Qt::RichText);
QProgressBar (进度条)
    QProgressBar* progressBar = new QProgressBar(this);progressBar->setRange(0, 100);progressBar->setValue(75);progressBar->setTextVisible(true);

高级视图控件

Model-Based Views

QListView
    QStringListModel* model = new QStringListModel;model->setStringList(QStringList() << "项目1" << "项目2" << "项目3");QListView* listView = new QListView(this);listView->setModel(model);listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
QTreeView
    QStandardItemModel* model = new QStandardItemModel;QStandardItem* parentItem = model->invisibleRootItem();parentItem->appendRow(new QStandardItem("父节点1"));parentItem->child(0)->appendRow(new QStandardItem("子节点1"));QTreeView* treeView = new QTreeView(this);treeView->setModel(model);

Item-Based Widgets

QListWidget
    QListWidget* listWidget = new QListWidget(this);listWidget->addItem("项目1");listWidget->addItem("项目2");listWidget->addItem("项目3");connect(listWidget, &QListWidget::itemClicked, this, [](QListWidgetItem* item){qDebug() << "选中:" << item->text();});
QTableWidget
QTableWidget* tableWidget = new QTableWidget(3, 3, this);tableWidget->setHorizontalHeaderLabels({"列1", "列2", "列3"});tableWidget->setItem(0, 0, new QTableWidgetItem("单元格(0,0)"));

容器控件

QGroupBox

    QGroupBox* groupBox = new QGroupBox("选项组",this);QVBoxLayout* layout = new QVBoxLayout;layout->addWidget(new QRadioButton("选项1"));layout->addWidget(new QRadioButton("选项2"));groupBox->setLayout(layout);

QTabWidget

    QTabWidget* tabWidget = new QTabWidget(this);tabWidget->addTab(new QWidget, "标签1");tabWidget->addTab(new QWidget, "标签2");tabWidget->setTabPosition(QTabWidget::North);

样式和外观

样式表

// 按钮样式  
QString buttonStyle = R"(  QPushButton {  background-color: #4CAF50;  border: none;  color: white;  padding: 8px 16px;  border-radius: 4px;  }  QPushButton:hover {  background-color: #45a049;  }  QPushButton:pressed {  background-color: #3d8b40;  }  
)";  
button->setStyleSheet(buttonStyle);

属性设置

widget->setProperty("class", "primary");  
widget->setMinimumSize(100, 30);  
widget->setFont(QFont("Arial", 12));

http://www.ppmy.cn/server/159101.html

相关文章

GaussDB中的Vacuum和Analyze

GaussDB中的Vacuum和Analyze 基本概念与区别手动Vacuum和Analyze查看Vacuum和Analyze记录Autovacuum配置参数 基本概念与区别 使用VACUUM、VACUUM FULL和ANALYZE命令定期对每个表进行维护&#xff0c;主要有以下原因&#xff1a; VACUUM FULL可回收已更新或已删除的数据所占据…

日拱一卒(20)——leetcode学习记录:大小为 K 且平均值大于等于阈值的子数组数目

一、题目 给定数组&#xff0c;统计数组中长度为k的子数组且该子数组的平均值大于threshold的数量 二、思路 滑动窗思路&#xff0c;计算长度为k的滑动窗的平均值&#xff0c;关键点在于&#xff0c;每滑动一次&#xff0c;只需要去掉头增加尾&#xff0c;而不需要重新全部计…

vue运用uniapp框架开发企业微信小程序中常用的一些基础方法

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“vue运用uniapp框架开发企业微信小程序中常用的一些基础方法”。 作为一名程序员&#xff0c;很多代码都是忘了再用&#xff0c;用了再忘。 今天梳理下日常开发中常用到的一些基础的方法&#xff0c;以方便后期开…

2Hive表类型

2Hive表类型 1 Hive 数据类型2 Hive 内部表3 Hive 外部表4 Hive 分区表5 Hive 分桶表6 Hive 视图 1 Hive 数据类型 Hive的基本数据类型有&#xff1a;TINYINT&#xff0c;SAMLLINT&#xff0c;INT&#xff0c;BIGINT&#xff0c;BOOLEAN&#xff0c;FLOAT&#xff0c;DOUBLE&a…

利用 rclone 挂载华为云 OBS 到本地

利用 rclone 挂载华为云 OBS 到本地 作者&#xff1a;Maki 日期&#xff1a;2025年01月14日 前言 通过 rclone 可以将华为云 OBS 挂载到本地目录或盘符&#xff0c;直接使用文件管理器或编辑器对其操作。本文将详细介绍从下载安装到挂载的完整步骤&#xff0c;支持 Windows …

C# 并发和并行的区别--16

目录 并发和并行 一.并发 定义 特点 代码示例 代码解释 二.并行 定义 特点 在C#中的体现 代码示例 代码解释 三.并发和并行的区别 四 .如何在C#中选择并发还是并行 1.考虑任务类型 2.代码示例 3.注意事项 五.总结 并发和并行 在编程领域,并发和并行是两个密切…

Linux 常用命令 - chmod 【改变文件或目录权限】

简介 “chmod” 这个命令来自于 “change mode” 的缩写&#xff0c;用于更改文件或目录的访问权限。这个命令允许用户设定谁可以读取、写入或执行一个文件。在 Linux 和其他类 Unix 系统中&#xff0c;文件权限对系统安全和用户隐私至关重要。 Linux/Unix 的文件调用权限分为…

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台zfs文件系统的服务器&#xff0c;管理员误操作删除了服务器上的数据。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有硬盘做好标记后取出&#xff0c;硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…