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

QT的UI入门

二、UI入门

  1. QWidget类(熟悉)

QWidget类是所有组件和窗口的基类,内部包含了一些基础的界面特性。

常用属性:

  1. 修改坐标
  • x : const int

横坐标,每个图形的左上角为定位点,横轴的零点在屏幕的最左边,正方向向右。

  • y : const int

纵坐标,每个图形的左上角为定位点, 纵轴的零点在屏幕的最上边。正方向向下。

虽然横坐标与纵坐标无法直接修改,但是可以通过函数间接进行修改。

// 参数1新的横坐标
// 参数2:新的纵坐标
void	move(int x, int y)

  1. 修改宽高
  • width : const int

宽度,不包含边框

  • height : const int

高度,不包含边框

// 参数1:新的宽度
// 参数2:新的高度
void	resize(int w, int h)

可以通过下面函数,直接设置上述四个属性。

// 参数是x、y,w、h宽高
void	setGeometry(int x, int y, int w, int h)

dialog.cpp

#include "dialog.h"// 构造函数定义
Dialog::Dialog(QWidget *parent)
    : QDialog(parent) // 透传构造。parent:参数
{
    qDebug() << "构造函数" << "helloworld";
    // 移动w 到200、200的位置
    move(200,200);
    // 设置w的宽高
    resize(200,600);}// 析构函数
Dialog::~Dialog()
{}

  1. 修改样式
  • styleSheet : QString

样式表,QString为Qt的字符串类型,样式表使用QSS语法(模仿前端CSS语法)。

#include "dialog.h"// 构造函数定义
Dialog::Dialog(QWidget *parent)
    : QDialog(parent) // 透传构造。parent:参数
{
    qDebug() << "构造函数" << "helloworld";
    // 移动w 到200、200的位置
    move(200,200);
    // 设置w的宽高
    resize(200,600);    // 设置样式表(设置背景颜色)
    setStyleSheet("background-color:red");
}// 析构函数
Dialog::~Dialog()
{}

2、添加子组件(掌握)

上面的窗口中什么都没有,实际上可以向窗口周昂添加若干组件,实现不同的显示和交互效果,本节以QPushButton(按压式按钮)组件为例子。

QPushButton要持续存在,直到窗口关闭,因此使用堆内存

// 参数1:按钮上显示的文字
// 参数2:现阶段可以认为是给当前组件设置父窗口。
​QPushButton(const QString & text, QWidget * parent = 0)

#include "dialog.h"// 构造函数定义
Dialog::Dialog(QWidget *parent)
    : QDialog(parent) // 透传构造。parent:参数
{
    qDebug() << "构造函数" << "helloworld";
    // 移动w 到200、200的位置
    move(200,200);
    // 设置w的宽高
    resize(200,600);    // 设置样式表(设置背景颜色)
//    setStyleSheet("background-color:red");
    // 创建一个按钮对象
    // 参数1:按钮显示的文字
    // 参数2:在当前对象窗口中创建一个按钮,this指向当前对象(w)
    btn = new QPushButton("你好",this);
    btn->move(50,200);
}// 析构函数
Dialog::~Dialog()
{
    delete btn;
}

以下是一个预设好的QPushButton的样式表,可以根据需求自行更改。

#define QPushButton_STYTLE (QString("\
/*按钮普通态*/\
QPushButton\
{\
    font-family:Microsoft Yahei;\
    /*字体大小为20点*/\
    font-size:20pt;\
    /*字体颜色为白色*/\
    color:white;\
    /*背景颜色*/\
    background-color:rgb(14 , 150 , 254);\
    /*边框圆角半径为8像素*/\
    border-radius:8px;\
}\
/*按钮悬停态*/\
QPushButton:hover\
{\
    /*背景颜色*/\
    background-color:rgb(100 , 137 , 255);\
}\
/*按钮按下态*/\
QPushButton:pressed\
{\
    /*背景颜色*/\
    background-color:rgb(14 , 135 , 10);\
    /*左内边距为3像素,让按下时字向右移动3像素*/\
    padding-left:3px;\
    /*上内边距为3像素,让按下时字向下移动3像素*/\
    padding-top:3px;\
}"))

推荐两个配色网站

在线颜色选择器 | RGB颜色查询对照表

Color Palette Generator - Create Beautiful Color Schemes

dialog.h

#ifndef DIALOG_H
#define DIALOG_H// 添加头文件QDialog对话框基类。Qt自带类型通常使用Q开头
#include <QDialog>
#include <QDebug>
#include <QPushButton>#define QPushButton_STYTLE (QString("\
/*按钮普通态*/\
QPushButton\
{\
    font-family:Microsoft Yahei;\
    /*字体大小为20点*/\
    font-size:20pt;\
    /*字体颜色为白色*/\
    color:white;\
    /*背景颜色*/\
    background-color:rgb(14 , 150 , 254);\
    /*边框圆角半径为8像素*/\
    border-radius:8px;\
}\
/*按钮悬停态*/\
QPushButton:hover\
{\
    /*背景颜色*/\
    background-color:rgb(100 , 137 , 255);\
}\
/*按钮按下态*/\
QPushButton:pressed\
{\
    /*背景颜色*/\
    background-color:rgb(14 , 135 , 10);\
    /*左内边距为3像素,让按下时字向右移动3像素*/\
    padding-left:3px;\
    /*上内边距为3像素,让按下时字向下移动3像素*/\
    padding-top:3px;\
}"))// 继承QDialog(对话框基类)
class Dialog : public QDialog
{
    // 先放着
    Q_OBJECTpublic:
    Dialog(QWidget *parent = 0); // 构造函数
    ~Dialog();  // 析构函数
private:
    QPushButton *btn;
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"// 构造函数定义
Dialog::Dialog(QWidget *parent)
    : QDialog(parent) // 透传构造。parent:参数
{
    qDebug() << "构造函数" << "helloworld";
    // 移动w 到200、200的位置
    move(200,200);
    // 设置w的宽高
    resize(200,600);    // 设置样式表(设置背景颜色)
//    setStyleSheet("background-color:red");
    // 创建一个按钮对象
    // 参数1:按钮显示的文字
    // 参数2:在当前对象窗口中创建一个按钮,this指向当前对象(w)
    btn = new QPushButton("你好",this);
    btn->move(50,200);
    // 设置样式给按钮对象
    btn->setStyleSheet(QPushButton_STYTLE);
}// 析构函数
Dialog::~Dialog()
{
    delete btn;
}

相关文章:

  • 2024牛客寒假算法基础集训营4
  • 新手搭建服装小程序全攻略
  • springMVC第一天
  • 统计zabbix指定日期内的告警数量
  • C陷阱和缺陷--第二章 “语法陷阱”
  • MyBatis---初阶
  • 【C语言】中的位操作符和移位操作符,原码反码补码以及进制之间的转换
  • Leetcode刷题笔记题解(C++):203. 移除链表元素
  • Spring Boot项目中TaskDecorator的应用实践
  • 第六十四天 服务攻防-框架安全CVE复现Apache shiroApache Solr
  • 如何使用Coded UI Test对Webpage进行自动化测试
  • FlashMeeting(基于FFmpeg+openCV)视频语音通讯系统
  • Java 爬虫 jvppeteer
  • 美易平台:全球金融市场一周前瞻G20会议至美联储纪要,关键事件点评
  • 【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——自我介绍(英文)
  • 《剑指offer》分解让复杂问题更简单
  • Angular 2 DI - IoC DI - 1
  • Angular 响应式表单之下拉框
  • ComponentOne 2017 V2版本正式发布
  • golang中接口赋值与方法集
  • Java Agent 学习笔记
  • java2019面试题北京
  • React+TypeScript入门
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue总结
  • 解析带emoji和链接的聊天系统消息
  • 三分钟教你同步 Visual Studio Code 设置
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 详解NodeJs流之一
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 移动端高清、多屏适配方案
  • ​flutter 代码混淆
  • ​Python 3 新特性:类型注解
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #DBA杂记1
  • #define,static,const,三种常量的区别
  • #ifdef 的技巧用法
  • #NOIP 2014# day.1 T2 联合权值
  • (2)Java 简介
  • (27)4.8 习题课
  • (HAL库版)freeRTOS移植STMF103
  • (SpringBoot)第七章:SpringBoot日志文件
  • (笔试题)分解质因式
  • (超详细)语音信号处理之特征提取
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (数据结构)顺序表的定义
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Windows2003安全设置/维护
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .cn根服务器被攻击之后
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 依赖注入的基本用发