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综合实例");

    // 创建按钮1
    QPushButton* 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();

    // 创建按钮2
    QPushButton* 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);

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Engine 5 C++ Advanced Action RPG 七章笔记

第七章 Ranged Enemy 2-Ranged Enemy Starting Weapon 制作新敌人的流程准备 新敌人的武器起始的状态数据自己的战斗能力投射能力自己的行为树 创建角色,添加武器,添加数据,就是继承之前的基类敌人的 运行结果 3-Glacer Starting Stats 看看就行,就是复制曲线表格更改数…

funcaptcha手势指向验证码识别

注意&#xff0c;本文只提供学习的思路&#xff0c;严禁违反法律以及破坏信息系统等行为&#xff0c;本文只提供思路 如有侵犯&#xff0c;请联系作者下架 本文滑块识别已同步上线至OCR识别网站&#xff1a; http://yxlocr.nat300.top/ocr/other/21 该验证码会给出某物品所有的…

GAMES101学习笔记(三):Rasterization 光栅化(三角形的离散化、抗锯齿、深度测试)

文章目录 视口变换 Viewport三角形网格 Triangle Mesh采样 Sampling走样/反走样 Aliasing/Antialiasing采样频率、空间域与频率域深入理解采样、走样、反走样反走样总结深度测试 Depth testing 课程资源&#xff1a;GAMES101-现代计算机图形学入门-闫令琪 Lec5 ~ Lec6 学习笔记…

vscode 扩展Cline、Continue的差别?

Cline和Continue都是VSCode的AI编程插件&#xff0c;它们在功能、用户体验、性能、适用场景以及配置和使用步骤等方面存在一些差别&#xff1a; 一、功能差异 编辑功能 Cline&#xff1a;能够分析项目的文件结构和源代码抽象语法树&#xff08;AST&#xff09;&#xff0c;通…

鸿蒙打包发布

HarmonyOS应用/元服务发布&#xff08;打包发布&#xff09; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密钥&#xff1a;包含非对称加密中使用的公钥和私钥&#xff0c;存储在密钥库文件中&#xff0c;格式…

晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

sparkRDD教程之必会的题目

1.前期准备 &#xff08;1&#xff09;看看上一期的博客&#xff0c;最好跟着上一期的博客把sparkRDD的基本命令给熟练掌握后&#xff0c;再来做这篇文章的任务。 上一期的博客&#xff1a;sparkRDD教程之基本命令-CSDN博客 &#xff08;2&#xff09;新建文件task6.scala …

stack和queue专题

文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈&#xff0c;或者是val < minst.top()就进栈 代码 class MinStack { public:M…

欧拉路径算法

欧拉图&#xff1a; 对于应该连通图G&#xff0c;有&#xff1a; 1欧拉路径&#xff1a;一条路径&#xff0c;它能够不重复地遍历完所有的边&#xff0c;这个性质很像不重复地一笔画完所有边&#xff0c;所以有些涉及到欧拉路径的问题叫做一笔画问题。 2欧拉回路&#xff1a…

【C#设计模式(23)——模板方法模式(Template Method Pattern)】

前言 在抽象类中封装算法的结构&#xff0c;具体的实现步骤由子类定义&#xff0c;从而达到不改变算法结构的&#xff0c;允许子类重定义方法内容。代码 public abstract class Teamplate {public void TeamplateMethod(){Step1();Step2();Step3();}protected abstract void …

MyBatis——XML映射文件

在MyBatis中&#xff0c;既可以通过注解的方式配置SQL语句&#xff0c;也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句&#xff1a; Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

Mysql--运维篇--安全性(数据库访问控制,最小权限原则,表空间加密,TLS加密,证书签发,SQL注入及防范等)

一、数据库访问控制 MySQL的访问控制是确保数据库安全的关键机制之一。通过合理的用户权限管理和访问控制策略&#xff0c;可以防止未经授权的用户访问、修改或删除敏感数据。 1、MySQL访问控制的工作原理 MySQL使用基于用户的访问控制模型&#xff0c;每个用户都有特定的权…

抽奖滚动功能

代码 <template><div class"box"><video class"video" src"../../assets/video/底层.mp4" loop autoplay muted></video><img class"choujiang" src"../../assets/image/抽奖1.png" alt"&…

【Python】Python之locust压测教程+从0到1demo:基础轻量级压测实战(1)

文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行&#xff08;GUI模式&#xff09;2、通过命令行执行&#xff08;非GUI模式&#xff09; 小知识&#xff1a;…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID&#xff08;提取字符&#xff09;CONCAT&#xff08;组合字符串&#xff09;EXACT&#xff08;比较字符串&#xff09; PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

用 Python 处理 CSV 和 Excel 文件

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

JS后盾人--再一次的走进JS?

程序跑起来与避免延迟 如果你讲JS&#xff0c;你就不可能只讲JS 后盾人说开发就要用VScode&#xff08;确实&#xff0c;Windows和Linux都可以跑&#xff09; 然后就是第一天开发的时候装的那些插件 前端访问流程基本分析 托管到服务器上的东西&#xff0c;谁访问下载到谁的…

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…

PT8M2102 触控型 8Bit MCU

1. 产品概述 PT8M2102 是一款基于 RISC 内核的 8 位 MTP 单片机&#xff0c;内部集成了电容式触摸感应模块、 TIMER 、 PWM、 LVR 、 LVD 、 WDT 等外设&#xff0c;其主要用作触摸按键开关&#xff0c;广泛适用于触控调光、电子玩具、消 费电子、家用电器等领域&am…

LangGraph 教程:初学者综合指南(2)

工具集成 将工具集成到 LangGraph 聊天机器人中可以显着增强其功能&#xff0c;使其能够按照您喜欢的方式访问和处理信息。 让我们修改上一节中创建的基本聊天机器人&#xff0c;以包含一个可以在网络上搜索信息的工具。我们将使用langchain_中community.tools TavilySearchR…