当前位置: 首页 > news >正文

Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

控件创建

包含对应控件类型头文件

实例化控件类对象

控件设置

设置父控件

设置窗口标题

设置控件大小

设置控件坐标

设置文本颜色和背景颜色

控件排版

垂直布局 QVBoxLayout

水平布局 QHBoxLayout

网格布局 QGridLayout

综合实例


控件创建

包含对应控件类型头文件

在Qt中使用特定控件前,需要包含相应的头文件。

例如,如果要使用QPushButtonQLineEdit,需要包含以下头文件。

#include <QPushButton>  
#include <QLineEdit> 

实例化控件类对象

#include <QPushButton>  
#include <QWidget>  class Widget : public QWidget {  
public:  Widget(QWidget *parent = nullptr);  
};  Widget::Widget(QWidget *parent)  : QWidget(parent)  
{  // 创建第一个按钮  QPushButton* btn1 = new QPushButton(this);  btn1->setText("按钮1");  btn1->move(50, 50);  // 创建第二个按钮  QPushButton* btn2 = new QPushButton("按钮2", this);  btn2->move(150, 50);  // 显示按钮  btn1->show();  btn2->show();  
}

控件设置

创建控件后,通常需要对其进行一系列设置,以满足具体的界面需求。

设置父控件

在Qt中,控件之间通常存在父子关系。通过设置父控件,可以确保子控件随父控件一起移动和显示。

QPushButton* btn = new QPushButton(this); // 'this'为父控件

设置窗口标题

对于顶层窗口,可以设置窗口的标题,以便用户识别。

this->setWindowTitle("Qt应用程序");

设置控件大小

可以通过resizesetFixedSize方法设置控件的大小。

this->resize(900, 600);          // 设置初始大小  
this->setFixedSize(900, 600);    // 设置固定大小,用户无法更改 

设置控件坐标

使用move方法可以设置控件在父容器中的位置。

btn2->move(0, 50); // 设置按钮2的位置为(0, 50)  

设置文本颜色和背景颜色

通过setStyleSheet方法,可以自定义控件的样式,包括文本颜色和背景颜色。

btn2->setStyleSheet(  "QPushButton{background:#FF0000; color:white}"  "QPushButton:hover{background:#00FF00;}"  "QPushButton:pressed{background:#0000FF;}"  
);

控件排版

在复杂的界面中,合理的布局管理器能够自动安排控件的位置和大小,提升开发效率和界面一致性。

Qt提供了多种布局管理器,其中的三种常用布局:垂直布局(QVBoxLayout)、水平布局(QHBoxLayout)和网格布局(QGridLayout)。

垂直布局 QVBoxLayout

QVBoxLayout按照从上到下的顺序排列控件,适用于需要垂直堆叠控件的场景。

Widget::Widget(QWidget *parent)  : QWidget(parent)  
{  m_Btn = new QPushButton("登录", this);  m_Edit = new QLineEdit(this);  QVBoxLayout* pVbox = new QVBoxLayout;  pVbox->addWidget(m_Btn);  pVbox->addWidget(m_Edit);  this->setLayout(pVbox);  
}  

水平布局 QHBoxLayout

QHBoxLayout按照从左到右的顺序排列控件,适用于需要水平排列控件的场景。

  m_Btn = new QPushButton("登录", this);  m_Edit = new QLineEdit(this);  QHBoxLayout* pHbox = new QHBoxLayout;  pHbox->addWidget(m_Btn);  pHbox->addWidget(m_Edit);  this->setLayout(pHbox);  

网格布局 QGridLayout

QGridLayout允许将控件按照行和列的方式排列,适用于需要复杂布局的场景,如表单。

Widget::Widget(QWidget *parent)  : QWidget(parent)  
{  QLabel* labelUsername = new QLabel("用户名", this);  QLabel* labelPassword = new QLabel("密码", this);  QLineEdit* editUsername = new QLineEdit(this);  QLineEdit* editPassword = new QLineEdit(this);  QPushButton* btnLogin = new QPushButton("登录", this);  QPushButton* btnRegister = new QPushButton("注册", this);  QGridLayout* layout = new QGridLayout(this);  layout->addWidget(labelUsername, 0, 0);  layout->addWidget(editUsername, 0, 1);  layout->addWidget(labelPassword, 1, 0);  layout->addWidget(editPassword, 1, 1);  layout->addWidget(btnRegister, 2, 0);  layout->addWidget(btnLogin, 2, 1);  
}  

综合实例

#include <QApplication>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QWidget>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置窗口基本信息this->resize(900, 600);//this->setFixedSize(900, 600);this->setWindowTitle("Qt综合实例");// 创建按钮1QPushButton* btn1 = new QPushButton("按钮1", this);btn1->setStyleSheet("QPushButton{background:#FF0000; color:white}""QPushButton:hover{background:#00FF00;}""QPushButton:pressed{background:#0000FF;}");btn1->move(50, 50);btn1->show();// 创建按钮2QPushButton* btn2 = new QPushButton("按钮2", this);btn2->move(200, 50);// 创建垂直布局QVBoxLayout* vbox = new QVBoxLayout;QPushButton* vBtn1 = new QPushButton("垂直按钮1", this);QPushButton* vBtn2 = new QPushButton("垂直按钮2", this);vbox->addWidget(vBtn1);vbox->addWidget(vBtn2);// 创建水平布局QHBoxLayout* hbox = new QHBoxLayout;QPushButton* hBtn1 = new QPushButton("水平按钮1", this);QPushButton* hBtn2 = new QPushButton("水平按钮2", this);hbox->addWidget(hBtn1);hbox->addWidget(hBtn2);// 创建网格布局QLabel* label1 = new QLabel("标签1", this);QLineEdit* edit1 = new QLineEdit(this);QLabel* label2 = new QLabel("标签2", this);QLineEdit* edit2 = new QLineEdit(this);QGridLayout* grid = new QGridLayout;grid->addWidget(label1, 0, 0);grid->addWidget(edit1, 0, 1);grid->addWidget(label2, 1, 0);grid->addWidget(edit2, 1, 1);// 创建主垂直布局,将所有布局嵌套其中QVBoxLayout* mainLayout = new QVBoxLayout;mainLayout->addLayout(vbox);mainLayout->addLayout(hbox);mainLayout->addLayout(grid);this->setLayout(mainLayout);}

相关文章:

Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 控件创建 包含对应控件类型头文件 实例化控件类对象 控件设置 设置父控件 设置窗口标题 设置控件大小 设置控件坐标 设置文本颜色和背景颜色 控件排版 垂直布局 QVBoxLayout …...

【计算机网络】lab8 DNS协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...

了解linux中的“of_property_read_u32()”

of_property_read_u32(node, "post-pwm-on-delay-ms",&data->post_pwm_on_delay); /*根据"post-pwm-on-delay-ms"&#xff0c;从属性中查找并读取一个32位整数*/ /*读到一个32位整数,保存到data->post_pwm_on_delay中*/ of_property_read_u32…...

iOS - Objective-C 底层中的内存屏障

1. 基本实现 // objc-os.h 中的内存屏障实现 #define OSMemoryBarrier() __sync_synchronize()// ARM 架构特殊处理 static ALWAYS_INLINE void OSMemoryBarrierBeforeUnlock() { #if defined(__arm__) || defined(__arm64__)OSMemoryBarrier(); #endif } 2. 解锁前的内存屏…...

阿里云服务器扩容系统盘后宝塔面板不显示扩容后的大小

解决方法步骤&#xff1a; 1. yum install cloud-utils-growpart xfsprogs -y 2.growpart /dev/vda 3 扩容系统盘的第3个分区 主要是这个命令1 3. fdisk -l 4. df -h 5. xfs_growfs /dev/vda3 主要是这个命令2 主要使用 df -Th 这个命令查看对应的文件系统类型 (1)、ext…...

c语言——【linux】多进程编程 【进程的创建,相关shell指令,进程状态切换,回收资源,守护进程等】

1.思维导图 2.进程的创建 函数原型&#xff1a;pid_t fork(void); 功能描述&#xff1a;以当前进程为父进程&#xff0c;创建一个子进程 进程链和进程扇的创建 3.多进程具体使用 3.1进程替换 exec 函数一族 int execl(const char *path, const char *arg, ... /* (char *) N…...

macos 搭建 ragflow 开发环境

ragflow 是一个很方便的本地 RAG 库。本文主要记录一下在本机的部署过程 1、总体架构说明 开发环境&#xff1a;macbook pro&#xff08;m1&#xff09;&#xff0c;16G内存 512G固态 因本机的内存和硬盘比较可怜&#xff0c;所以在服务器上部署基础 docker 包&#xff0c;…...

信创改造-龙蜥操作系统搭载MySql、Tomcat等服务

龙蜥操作系统 Anolis OS 8 是 OpenAnolis 社区推出的完全开源、中立、开放的发行版&#xff0c;它支持多计算架构&#xff0c;也面向云端场景优化&#xff0c;兼容 CentOS 软件生态。Anolis OS 8 旨在为广大开发者和运维人员提供稳定、高性能、安全、可靠、开源的操作系统服务。…...

Java 数据结构 队列之双端队列 常用方法 示例代码 及其实现

目录 常用方法 示例代码 常见实现 Java中的双端队列&#xff08;Deque&#xff0c;Double Ended Queue&#xff09;是一种队列&#xff0c;它允许在队列的两端插入和删除元素。与普通队列&#xff08;FIFO&#xff09;不同&#xff0c;双端队列的元素可以从队列的两端进行添…...

【原创】大数据治理入门(2)《提升数据质量:质量评估与改进策略》入门必看 高赞实用

提升数据质量&#xff1a;质量评估与改进策略 引言&#xff1a;数据质量的概念 在大数据时代&#xff0c;数据的质量直接影响到数据分析的准确性和可靠性。数据质量是指数据在多大程度上能够满足其预定用途&#xff0c;确保数据的准确性、完整性、一致性和及时性是数据质量的…...

arcgis中生成格网矢量带高度

效果 1、数据准备 (1)矢量边界(miain.shp) (2)DEM(用于提取格网标高) (3)DSM(用于提取格网最高点) 2、根据矢量范围生成格网 模板范围选择矢量边界,像元宽度和高度根据坐标系来输入,我这边是4326的,所以输入的是弧度,输出格网矢量gewang.shp 3、分区统计 …...

使用gtsam添加OrientedPlane3Factor平面约束因子

在基于地面约束的SLAM优化中&#xff0c;已知的地面信息&#xff08;如 plan.pcd 文件中的地面模型&#xff09;可以用作一个先验约束&#xff0c;以帮助优化位姿估计。具体而言&#xff0c;这个过程涉及将地面模型和每个帧的位姿结合&#xff0c;以创建一个因子模型&#xff0…...

换了城市ip属地会变吗?为什么换了城市IP属地不变

当我们跨越城市的界限&#xff0c;从一个地方迁移到另一个地方时&#xff0c;许多日常使用的网络服务和应用程序都会感知到这种变化&#xff0c;其中一个显著的现象就是IP属地的变化。IP属地&#xff0c;即IP地址所在的地理位置信息&#xff0c;它通常与互联网服务提供商&#…...

移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…...

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南

IntelliJ IDEA Type Hierarchy Scope Pattern 学习指南 什么是 Type Hierarchy&#xff1f; Type Hierarchy 是 IntelliJ IDEA 提供的一个工具&#xff0c;允许开发者查看某个类的继承关系及其实现的接口结构。它是理解类关系的重要工具&#xff0c;尤其在处理复杂的继承体系…...

简聊MySQL并发事务中幻读、虚读问题的解决方案

在MySQL数据库中&#xff0c;事务的幻读和虚读问题是并发控制中的关键挑战。以下是针对这两个问题的解决方案及原理说明&#xff0c;并附上相关示例。 一、幻读问题及其解决方案 幻读问题的定义 幻读是指一个事务在前后两次查询同一个范围的时候&#xff0c;后一次查询看到了…...

【搭建JavaEE】(2)Tomcat安装配置和第一个JavaEE程序

Tomcat–容器(Container) 下载 Apache Tomcat - Welcome! 下载完成 请求/响应 结构 测试 查看Jdk版本 改端口号localhost8080–>8099 学学人家以后牛逼了可以用自己名字当文件夹名 配置端口8099 找到server文件 用记事本打开 再打开另一个logging文件 ”乱码解决“步骤&…...

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…...

websocket股票行情接口

股票行情区别 交易所出来的数据&#xff0c;不管通过什么渠道&#xff0c;延时一般都不会差太远&#xff0c;估计一般也就几十ms的差别。 但是如果是通过http轮询&#xff0c;不太可能几十ms全部轮询一次。所以&#xff0c;做量化的话&#xff0c;用http协议是最次的选择。 …...

朴素贝叶斯分类器

目录 一、生成模型&#xff08;学习&#xff09;&#xff08;Generative Model&#xff09; vs 判别模型&#xff08;学习&#xff09;&#xff08;Discriminative Model&#xff09; 1、官方说明 2、通俗理解 3、举例 二、生成学习算法 1、数学符号说明 2、贝叶斯公式 …...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

Django RBAC项目后端实战 - 03 DRF权限控制实现

项目背景 在上一篇文章中&#xff0c;我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统&#xff0c;为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递

在 C 编程中&#xff0c;左值和右值的概念以及std::move的使用&#xff0c;常常让开发者感到困惑。特别是在函数重载场景下&#xff0c;如何合理利用这些特性来优化代码性能、确保语义正确&#xff0c;更是一个值得深入探讨的话题。 在开始之前&#xff0c;先提出几个问题&…...