QT常用控件使用及布局

news2024/9/26 3:29:06

QT常用控件使用及布局


文章目录

  • QT常用控件使用及布局
  • 1、创建带Ui的工程
  • 2、ui界面介绍
    • 1、界面设计区
    • 2、对象监视区
    • 3、对象监属性编辑区
    • 4、信号与槽
    • 5、布局器
    • 6、控件
      • 1、Layouts
        • 1、布局管理器
        • 2、布局的dome
      • 2、Spacers
      • 3、Buttons
      • 4、项目视图组(Item Views)
      • 5、项目控件组(Item Widgets)
      • 6、Containers(容器)
      • 7、Input widgets
        • 1、QLineEdit 举例
      • 8、Display widgets
        • 1、怎么添加资源文件
        • 2、QLable标签实现标签文本,图片,链接
  • 3、布局练习
  • 4、自定义控件
  • 5、样式表
    • 1、Qt样式表介绍
    • 2、Qt样式表简单举例
  • 6、总结


1、创建带Ui的工程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
项目里会生成带.ui的文件,双击就可以进行ui设计。
在这里插入图片描述

2、ui界面介绍

双击 .ui文件,会弹出UI设计器,其布局大概为:
在这里插入图片描述

1、界面设计区

可以把控件直接拖进来进行布局。

2、对象监视区

所以在界面设计区的控件都能在这看到。

3、对象监属性编辑区

可以对界面设计区选中的控件进行属性设置。比如在界面设计区加入一个按钮。
在这里插入图片描述

4、信号与槽

在这里插入图片描述另外也可以在界面设计区选择按钮,然后右键 - 转到槽…,去添加自定义槽函数。
在这里插入图片描述
在这里插入图片描述
然后在窗口的类声明中的自动生成如下槽函数。然后去实现槽函数即可。这种方式就不需要自己去定义槽函数。
在这里插入图片描述

5、布局器

在这里插入图片描述

6、控件

在这里插入图片描述

1、Layouts

在这里插入图片描述

1、布局管理器

所谓 GUI 界面,归根结底,就是一堆控件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,控件的位置尤其重要。我们必须要指定控件放在哪里,以便窗口能够按照我们需要的方式进行渲染。这就涉及到控件定位的机制。
在这里插入图片描述
Qt 提供的布局中以下三种是我们最常用的:
QHBoxLayout:按照水平方向从左到右布局;
QVBoxLayout:按照竖直方向从上到下布局;
QGridLayout:在一个网格中进行布局,类似于 HTML 的 table(网格布局可以任意布局)

2、布局的dome
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QSpinBox *spinBox = new QSpinBox(this);
    QSlider *slider = new QSlider(Qt::Horizontal, this);

    connect(slider, &QSlider::valueChanged,
                     spinBox, &QSpinBox::setValue);

    void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;

    /* 因为valueChanged信号重载了所以用函数指针来区分调用带参的信号 */
    connect(spinBox, spinBoxSignal,
                     slider, &QSlider::setValue);

    spinBox->setValue(35); /* 设置spinBox值 */

    /* 给控件设置布局 指定布局的父对象(this) 相当把控件放到窗口 */
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(spinBox);
    layout->addWidget(slider);
}

进行水平布局运行如下:
在这里插入图片描述
当窗口的大小改变时,窗口布局里的控件也会自动发生变化。

2、Spacers

在这里插入图片描述

3、Buttons

在这里插入图片描述

4、项目视图组(Item Views)

在这里插入图片描述

5、项目控件组(Item Widgets)

在这里插入图片描述

6、Containers(容器)

在这里插入图片描述

7、Input widgets

在这里插入图片描述

1、QLineEdit 举例
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLineEdit>
#include <QCompleter>
#include <QStringList>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    QLineEdit *edit = new QLineEdit(this);
    //设置内容
    edit->setText("12345678");

    /* 移动行编辑的位置 */
    edit->move(200,300);
    //设置内容显示间隙
    edit->setTextMargins(15, 0, 0, 0);

    //设置内容显示方式
    //ui->lineEdit->setEchoMode(QLineEdit::Password);
    QStringList list;
    list << "hello" << "How are you" << "hehe";

    QCompleter *com = new QCompleter(list, this);

    /* 设置是否区分大小写 */
    com->setCaseSensitivity(Qt::CaseInsensitive);

    /* 将QCompleter对象设置到QLineEdit中 */
    edit->setCompleter(com);
}

按’H’会有提示
在这里插入图片描述

8、Display widgets

在这里插入图片描述

1、怎么添加资源文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在资源里生成image.qrc文件 添加前缀:可以设置前缀 添加文件:可以添加文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
右键—>复制资源路径到剪贴板 。就可以复制选中的资源路径。比如复制如下 //image/LuffyQ.png 根据这路经就可以加载资源。

2、QLable标签实现标签文本,图片,链接
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLabel>
#include<QMovie> /* 动画头文件 */
#include <QDesktopServices>

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);

    /* 1. 设置文本 */
    QLabel *lable_1 = new QLabel(this);
    lable_1->move(200,100);
    lable_1->setText("标签");

    /* 2. 设置图片 */
    QLabel *lable_2 = new QLabel(this);
    lable_2->move(200,200);
    lable_2->setPixmap(QPixmap("://image/LuffyQ.png"));
    /* 让图片自适应标签的大小 */
    lable_2->setScaledContents(true);

    /* 3. 设置动画 */
    QLabel *lable_3 = new QLabel(this);
    lable_3->move(400,200);

    /* 创建动画 */
    QMovie *movie = new QMovie("://image/mario.gif"); /* 资源要是动态的图片 */
    /* movie指定父对象 */
    movie->setParent(this);
    /* 标签里设置动画 */
    lable_3->setMovie(movie);
    /* 启动动画 */
    movie->start();
    /* 让动画自适应标签的大小 */
    lable_3->setScaledContents(true);

    /* 4. 显示HTML链接 */
    QLabel *lable_4 = new QLabel(this);
    lable_4->move(500,400);

    lable_4 ->setText("<h1><a href=\"https://www.baidu.com\">百度一下</a></h1>");
    /* 设置打开外部链接方法1 */
    lable_4 ->setOpenExternalLinks(true);

    /* 设置打开外部链接方法2 */
    //connect(lable_4, &QLabel::linkActivated, this, &MyWidget::slotOpenUrl);
}


MyWidget::~MyWidget()
{
    delete ui;
}

void MyWidget::slotOpenUrl(const QString &link)
{

    QDesktopServices::openUrl(QUrl(link.toLocal8Bit()));
}

3、布局练习

原则:先局部在整体布局。
在这里插入图片描述
总结:布局需要多练习。对象属性里熟悉合理设置。

4、自定义控件

不是在已有的控件拖到界面设计区。
怎么添加类文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
生成Smallwidget.h Smallwidget.cpp
在这里插入图片描述
在Smallwidget.cpp里添加如下代码

#include "smallwidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>

Smallwidget::Smallwidget(QWidget *parent)
    : QWidget{parent}
{
    QSpinBox *spin = new QSpinBox(this);
    QSlider *slider = new QSlider(Qt::Horizontal, this);

    //把控件添加到布局中
    QHBoxLayout *hLayout = new QHBoxLayout(this);
    hLayout->addWidget(spin);
    hLayout->addWidget(slider);

    connect(spin, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
            slider, &QSlider::setValue);

    connect(slider,  &QSlider::valueChanged, spin, &QSpinBox::setValue);
}

在界面设计区添加空容器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终运行如下:
在这里插入图片描述
提升的Smallwidget类在容器里显示出来。

5、样式表

1、Qt样式表介绍

Qt样式表是一个可以自定义部件外观的十分强大的机制﹐控件的都可以使用Qt样式表来美化。Qt样式表的概念,术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CSS)的启发,不过与CSS不同的是,Qt样式表应用于部件。
样式表可以使用QApplication: : setStyleSheet()函数将其设置到整个应用程序上,也可以使用QWidget::setStyleSheet()函数将其设置到一个指定的部件(还有它的子部件)上。如果在不同的级别都设置了样式表,那么Qt会使用所有有效的样式表,这被称为样式表的层叠。

2、Qt样式表简单举例

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QLabel>
#include <QPushButton>
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QLabel *pLable = new QLabel(this);
    QLabel *pLable1 = new QLabel(this);

    QPushButton *button = new QPushButton(this);
    pLable->move(100,100);
    pLable->resize(200,200);
    pLable1->resize(100,100);
    button->move(300,300);

    button->resize(300,300);
    this->setStyleSheet("QLabel{color:rgb(0, 255, 255);"
                        "background-color:red;"
                        "}"); /* 设置整个窗口的标签 */

    pLable->setStyleSheet("QLabel{color:rgb(0, 255, 255);"
                             "background-color:blue;"
                             "border-image:url(://image/down.png);"
                             "}");

    button->setStyleSheet("QPushButton{"
                                  "border-image:url(:/image/Sunny.jpg);" /* 填充边框的图像 */
                                  "}"

                                  "QPushButton:hover{"
                                  "border-image:url(:/image/up.png);" /* 鼠标悬空在按钮的图像 */
                                  "}"

                                  "QPushButton:pressed{"
                                  "border-image:url(:/image/Luffy.png);" /* 按钮按下图像 */
                                  "}"

                                  );
}

其它QT样式表博客

6、总结

主要介绍QT的UI界面及控件的简单使用与布局。及自定义控件。控件的渲染样式表的简单介绍。

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

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

相关文章

MySQL忘记密码,如何重置密码(Windows)

1. 停止MySQL服务 打开“服务”管理工具&#xff08;可以在开始菜单搜索“服务”或运行 services.msc&#xff09;。 找到你的MySQL服务&#xff0c;可能叫别的&#xff0c;但是应该都是mysql开头的。 鼠标右键停止运行它。 2. 跳过权限表启动 MySQL 打开命令提示符&#x…

【软件测试】软件开发各阶段的自动测试技术

说到自动化测试&#xff0c;你可能最为熟悉的就是GUI自动化测试了。比如&#xff0c;早年的C/S架构&#xff0c;通常就是用自动化测试脚本打开被测应用&#xff0c;然后在界面上以自动化的方式执行一系列的操作&#xff1b;再比如&#xff0c;现今的Web站点测试&#xff0c;也是…

CCC数字钥匙设计【NFC】--NFC通信之APDU TLV

CCC3.0&#xff0c;包含NFC、BLE、UWB技术。当采用NFC通信时&#xff0c;车端与手机端是通过APDU来进行交互的。而在APDU中的data数据段&#xff0c;又可能会嵌入TLV协议的数据&#xff0c;以完成车端与手机端的通信交互。 本文先介绍APDU及TLV的一些基础知识&#xff0c;再通…

1/7文章

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;具有运动模糊的大规模场景的混合神经绘制1、研究背景2、方法提出3、相关方法3.1、混合神经渲染模型&#xff08;Hybrid Neural Re…

特种印制电路技术

1特种印制电路技术现状、分类及特点 2006年&#xff0c;信息产业部(现工信部)电子信息产品管理司将高档PCB产品类型概括为HDI板、多层FPC、刚挠结合板、IC载板、通信背板、特种板材印制板、印制板新品种等种类。但直至目前&#xff0c;在印制电路设计与制造领域还没有形成特种…

Linux学习第50天:Linux块设备驱动实验(二):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、使用请求队列实验 1.实验程序编写 使用开发板上的一段RAM来模拟一段块设备&#xff0c;也就是ramdisk. 机械硬盘 34 #define RAMDISK_SIZE (2 * 1024 * 10…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑系统调峰需求与光热电站收益平衡的储热容量优化配置》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题表明研究的主题涉及到光热电站系统中的储热容量优化配置&#xff0c;而优化的目标是在系统中实现调峰需求并平衡光热电站的收益。让我们逐步解读这…

使用.Net nanoFramework为ESP32进行蓝牙配网

通过前面的介绍&#xff0c;我们已经学会了如何使用 .NET nanoFramework 为 ESP32 设备连接 Wi-Fi 网络。然而&#xff0c;在实际的物联网环境中&#xff0c;我们往往需要使用更便捷的式来满足配网需求。这篇文章将带你了解一些常见的配网方案&#xff0c;并以 ESP32 为例&…

数据结构入门到入土——链表(2)

目录 一&#xff0c;与链表相关的题目&#xff08;2&#xff09; 1.输入两个链表&#xff0c;找出它们的第一个公共节点 2.给定一个链表&#xff0c;判断链表中是否有环 3.给定一个链表&#xff0c;返回链表开始入环的第一个节点&#xff0c;若无则返回null 一&#xff0c;…

【好书推荐】ReactJS实践入门

作者简介 Chris Minnick是一位多产的作家、博主、培训师、演说家和Web工程师。他创立的WatzThis&#xff1f;公司&#xff0c;一直致力于寻找更好的方法向初学者教授计算机和编程技能。 Chris拥有超过25年的全栈开发经验&#xff0c;他也是一名教龄超过10年的培训师&#xff0c…

科学的摇篮 - 贝尔实验室

AT&T贝尔实验室&#xff08;AT&T Bell Laboratories&#xff09;是美国电信公司AT&T的研究与开发部门&#xff0c;成立于1925年。它在20世纪的许多年里一直是科学与技术创新的重要中心&#xff0c;做出了众多重大贡献&#xff0c;并为多项科技成就奠定了基础。以下…

Java Swing手搓坦克大战遇到的问题和思考

1.游戏中的坐标系颇为复杂 像素坐标系还有行列坐标&#xff0c;都要使用&#xff0c;这之间的互相转化使用也要注意 2.游戏中坦克拐弯的处理&#xff0c;非常重要 由于坦克中心点是要严格对齐到一条网格线&#xff0c;并沿着这条线前进的&#xff0c;如果拐弯不做处理&#…

动态卡尺胶路检测

动态卡尺胶路检测 1. 示例效果2. 代码 1. 示例效果 使用了三个卡尺工具、一个线段工具。这种方法可以检测胶路最常见的缺陷&#xff1a;断胶和胶宽等 2. 代码 #region namespace imports using System; using System.Collections; using System.Drawing; using System.IO; …

【开发日记】IDEA“找不到或无法加载主类”问题

记录一个研究了两个小时的“玄学”问题找不到或无法加载主类。 ​1、问题 使用IDEA启动SpringBoot项目显示找不到或无法加载主类。 2、解决经历 尝试了很多种解决方法都没有解决&#xff0c;下面是我网上查询后尝试的一些方法。这些方法我都没有解决问题&#xff0c;是因为…

双十一的祈祷【算法赛】

问题描述 双十一&#xff0c;不仅是购物狂欢节&#xff0c;更有 "光棍节" 之称。这源于 11:1111:11 由四个 11 构成&#xff0c;象征着单身。 作为大学生的小蓝也想经历甜甜的校园恋爱&#xff0c;于是他找到了爱神丘比特&#xff0c;向他祈祷能为自己带来一段邂逅…

微软开源时空预测Fost的使用和解读

一、引言 时空预测是指对未知系统状态在时间和空间上的预测&#xff0c;它是地球系统科学、交通运输、智慧城市等领域的重要技术和工具。时空预测的目的是利用历史数据和当前信息&#xff0c;通过建立时空依赖关系&#xff0c;来推断未来的变化趋势和可能的情景。时空预测的应…

《PySpark大数据分析实战》-24.数据可视化图表介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

强化学习4——动态规划初探

动态规划具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子问题的过程中保存已经求解的结果&#xff0c;以便后续使用。实际上动态规划更像是一种通用的思路&#xff0c;而不是具体某个算法。 在强化学习中&#xff0c;被用于求解值函…

CAN总线基础详解以及stm32的CAN控制器

目录 CAN简介 CAN总线拓扑图 CAN总线特定 CAN应用场景 CAN的物理层 CAN的协议层 CAN数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 stm32的CAN控制器 CAN控制器介绍 CAN控制器模式 CAN控制器框图 接收过滤器 CAN控制器波特率计算 CAN相…

基于SSM的图书商城(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书商城&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…