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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/68143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04、Redis深入数据结构

一、简单动态字符串SDS 无论是Redis中的key还是value&#xff0c;其基础数据类型都是字符串。如&#xff0c;Hash型value的field与value的类型&#xff0c;List型&#xff0c;Set型&#xff0c;ZSet型value的元素的类型等都是字符串。redis没有使用传统C中的字符串而是自定义了…

Require:利用MySQL binlog实现闪回操作

1&#xff0c;闪回原理 【binlog】MySQL binlog以event的形式&#xff0c;记录了MySQL server从启用binlog以来所有的变更信息&#xff0c;能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的&#xff1a;一是为了主从复制&#xff1b;二是某些备份还原操作后需要重…

traceroute原理探究

文章中有截图&#xff0c;看不清的话&#xff0c;可以把浏览器显示比例放大到200%后观看。 linux下traceroute的原理 本文通过抓包观察一下linux下traceroute的原理 环境&#xff1a;一台嵌入式linux设备&#xff0c;内网ip是192.168.186.195&#xff0c;其上有192.168.202.…

DM表结构修改

DM 表结构修改 注&#xff1a;达梦数据库在操作数据库的时候需要带上模式名、即 模式名表名 模式名 – 也就是数据库名 索引 一个 [模式] 下&#xff0c;[索引名称] 唯一 创建索引 示例&#xff1a; # 语法 CREATE INDEX "[索引名称]" ON "[模式名]".&q…

无源器件-电容

电容器件的参数 基本概念由中学大学物理或电路分析内容获得&#xff0c;此处不做过多分析。 电容的产量占全球电子元器件产品的40%以上。 单位&#xff1a;法拉 F&#xff1b;1F10^6uF&#xff1b;电路中常见的104电容就是10*10^4pF100nF0.1uF C为电容&#xff0c;Rp为绝缘电…

【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南

大语言模型的数据准备&#xff1a;构建高质量训练数据的关键指南 大语言模型&#xff08;LLM, Large Language Model&#xff09;的训练离不开高质量的数据&#xff0c;而数据准备是模型性能的基石。无论是预训练还是微调&#xff0c;数据的选择、清洗和标注都会直接影响模型的…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

ucharts写的小程序如何解决Y轴小数点问题

去除小数点 在yAxis的data中添加 formatter: (value) > { // console.log("formatter", value, typeof (value)) return value > 0 ? Math.floor(value) : value; } yAxis: {gridType: "dash",dashLength: 2,data: [{unit: &qu…

知识图谱抽取分析中,如何做好实体对齐?

在知识图谱抽取分析中&#xff0c;实体对齐是将不同知识图谱中的相同实体映射到同一表示空间的关键步骤。为了做好实体对齐&#xff0c;可以参考以下方法和策略&#xff1a; 基于表示学习的方法&#xff1a; 使用知识图谱嵌入技术&#xff0c;如TransE、GCN等&#xff0c;将实体…

【redis】centos7下安装redis7

在CentOS 7下安装Redis7可以通过以下两种方法实现&#xff1a;手动编译安装和使用YUM进行安装。 CentOS 7系统的环境和版本&#xff1a; $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)手动编译安装 参考官方文档&#xff1a;https://redis.io/docs/lates…

ASP.NET Core 系列总结

ASP.NET Core 系列总结 章节目录1. 入口文件2. 请求管道和中间件3. 依赖注入4. 配置系统5. 选项系统6. 缓存7. 日志记录系统 《ASP.NET Core》 系列文章基于 .NET 3.1 和 .NET 6&#xff0c;主要是系统总结自己日常工作和学习中的知识点&#xff0c;之前是自己在 OneNote 上自己…

FFmpeg硬件解码

使用FFmpeg进行硬件解码时&#xff0c;通常需要结合FFmpeg的API和硬件加速API&#xff08;如CUDA、VAAPI、DXVA2等&#xff09;。以下是一个简单的C代码示例&#xff0c;展示如何使用FFmpeg进行硬件解码。这个示例使用了CUDA作为硬件加速的后端。 1. 安装FFmpeg和CUDA 确保你…

OpenGL 进阶系列18 - OpenGL SuperBible - alienrain 例子学习

一:概述 本文学习记录下 alienrain 的实现原理。它模拟了“Alien”图案的雨滴下落效果,并使用了着色器,纹理数组和Uniform Buffer 缓冲区等现代OpenGL接口。下面是代码实现分析以及主要接口介绍。 二:实现过程 该例子主要使用了GL_TEXTURE_2D_ARRAY 来存储多个图像层,这非…

Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)

一、函数基础 1.1、函数的用法和底层分析 函数是可重用的程序代码块。 函数的作用&#xff0c;不仅可以实现代码的复用&#xff0c;更能实现代码的一致性。一致性指的是&#xff0c;只要修改函数的代码&#xff0c;则所有调用该函数的地方都能得到体现。 在编写函数时&#xf…

win32汇编环境,窗口程序中对按钮控件常用操作的示例

;运行效果 ;win32汇编环境&#xff0c;窗口程序中对按钮控件常用操作的示例 ;常用的操作&#xff0c;例如创建按钮控件&#xff0c;使其无效&#xff0c;改变文本&#xff0c;得到文本等。 ;将代码复制进radasm软件里&#xff0c;直接就可以编译运行。重点部分加备注。 ;>&g…

支付宝租赁小程序提升租赁行业效率与用户体验

内容概要 在当今数字化的世界里&#xff0c;支付宝租赁小程序的出现构建了一种新的租赁模式&#xff0c;使得用户在使用过程中体验更加流畅。想象一下&#xff0c;你在寻找租赁服务时&#xff0c;不再需要繁琐的流程和冗长的等待&#xff0c;只需通过手机轻松点击几下&#xf…

ffmpeg 编译遇到的坑

makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加&#xff1a; --disable-htmlpages

嵌入式系统中的 OpenCV 与 OpenGLES 协同应用

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一、OpenCV 在嵌入式中的基石地位二、OpenGLES 为嵌入式图形渲染赋能三、二者协同的精妙之处四、面临的挑战与应对策略 在嵌入式开…

day06_Spark SQL

文章目录 day06_Spark SQL课程笔记一、今日课程内容二、DataFrame详解&#xff08;掌握&#xff09;5.清洗相关的API6.Spark SQL的Shuffle分区设置7.数据写出操作写出到文件写出到数据库 三、Spark SQL的综合案例&#xff08;掌握&#xff09;1、常见DSL代码整理2、电影分析案例…

element-ui dialog弹窗 设置点击空白处不关闭

需求&#xff1a;点击空白处不关闭弹窗 实现&#xff1a;:close-on-click-modal“false” 需求&#xff1a;点击Esc不关闭弹窗 实现&#xff1a;:close-on-press-escape“false” https://blog.csdn.net/qq_33911541/article/details/132708890