C++-UI入门

1、QWidget类

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

常用属性:

1.1修改坐标

  • x : const int

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

  • y : const int

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

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

需要注意的是,位置包含边框。

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

1.2修改宽高

  • width : const int

宽度

  • height : const int

高度

无法直接进行修改,但是通过函数:不包括边框

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

下面的函数可以同时设置上述四个属性:

void	setGeometry(int x, int y, int w, int h)

1.3修改样式   stylesheet

  • styleSheet : QString

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

#include "dialog.h"// 构造函数定义
// parent 参数
Dialog::Dialog(QWidget *parent): QDialog(parent)   // 透传构造
{// 移动w窗口到200,200位置move(200,200);// 设置窗口宽度,以及窗口高度resize(200,600);// 设置样式表(设置窗口背景为红色)setStyleSheet("background-color:red");qDebug() << "构造函数 hello world";
}// 析构函数类外定义
Dialog::~Dialog()
{}

2、添加若干子组件

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

QPushButton要持续存在,直到窗口关闭,因此使用堆内存。按照C++的内存回收机制,子组件应该在父窗口的构造函数中创建,在析构函数中销毁。

QPushButton构造函数:

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

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QDebug>
#include <QPushButton>//按钮头文件
class Dialog : public QDialog
{
    Q_OBJECT
public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
    QPushButton *btn;   // 成员变量
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
// 构造函数定义
// parent 参数
Dialog::Dialog(QWidget *parent): QDialog(parent)   // 透传构造
{// 移动w窗口到200,200位置move(200,200);// 设置窗口宽度,以及窗口高度resize(200,600);// 设置样式表(设置窗口背景为红色)setStyleSheet("background-color:red");// 创建一个按钮对象,头文件<QPushButton>, 且头函数内声明,主函数调用// 参数1:按钮显式的内容// 参数2:在当前对象窗口中创建一个按钮,this是指向当前对象
    btn = new QPushButton("你好",this);
    btn->move(50,200);qDebug() << "构造函数 hello world";
}
// 析构函数类外定义
Dialog::~Dialog()
{// C++内存回收
    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#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:#87e2ff;\
}\
/*按钮按下态*/\
QPushButton:pressed\
{\
    /*背景颜色*/\
    background-color:#0a89b2;\
    /*左内边距为3像素,让按下时字向右移动3像素*/\
    padding-left:3px;\
    /*上内边距为3像素,让按下时字向下移动3像素*/\
    padding-top:3px;\
}"))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)
{// 移动w到200,200的位置move(200,200);// 设置w的宽高resize(200,600);// 创建子组件对象// 参数2同时使用了this指针+多态的用法
    btn = new QPushButton("你好",this);
    btn->move(50,200);
    btn->resize(100,100);// 设置样式表给按钮对象,样式表在头函数内声明。
    btn->setStyleSheet(QPushButton_STYTLE);
}Dialog::~Dialog()
{// C++内存回收
    delete btn;
}

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

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

相关文章

【Machine Learning】Generalization Theory

本笔记基于清华大学《机器学习》的课程讲义中泛化理论相关部分&#xff0c;基本为笔者在考试前一两天所作的Cheat Sheet。内容较多&#xff0c;并不详细&#xff0c;主要作为复习和记忆的资料。 No free lunch For algroithm A ′ A A′, exsits f f f that is perfect answ…

Python数据类型转换

数据类型的不一致可能导致分析错误&#xff0c;因此在数据清洗中通常需要对数据类型进行转换。 主要包括一下几个方面&#xff1a; 整数&#xff08;int&#xff09;和浮点数&#xff08;float&#xff09;之间的转换 字符串&#xff08;str&#xff09;和整数&#xff08;in…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

BitMap解析(一)

文章目录 前言数据结构添加与删除操作 JDK中BitSet源码解析重要成员属性初始化添加数据清除数据获取数据size和length方法集合操作&#xff1a;与、或、异或 前言 为什么称为bitmap&#xff1f; bitmap不仅仅存储介质以及数据结构不同于hashmap&#xff0c;存储的key和value也…

centos 8 安装docker

一&#xff0c;安装依赖&#xff1a; yum install -y yum-utils device-mapper-persistent-data lvm2 二&#xff0c;安装docker仓库源&#xff1a; #docker官方仓库源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #国内阿里仓…

4D激光雷达

什么是4D激光雷达 4D激光雷达,也称为4D成像雷达,是一种利用回声定位和飞行时间测量概念来绘制三维环境中物体并附加速度信息的技术。相比于传统的3D激光雷达,4D激光雷达可以生成点云的3D坐标,并提供关于环境的第四维度信息,通常是速度。这种技术被广泛应用于自动驾驶汽车…

微服务使用过程中 常见的问题 解决方案

随着现代软件开发和实践的发展&#xff0c;微服务架构已经成为许多企业和技术团队的首选架构。然而&#xff0c;在微服务使用过程中&#xff0c;也会遇到一些常见的问题。本文将论述这些问题以及相应的解决方案。 常见问题 服务间通信&#xff1a;在微服务架构中&#xff0c;服…

根据方程组解,生成n个n元一次方程组

为了生成一个方程组&#xff0c;今天搓了一个 利用增广矩阵进行操作 #include <stdio.h> #include<iostream> #include <stdlib.h> #include <time.h> #include <unistd.h> using namespace std; #define MAX_SIZE 200int var_num0;int matr…

Spring之Bean生命周期源码解析

Bean的生成过程 1. 生成BeanDefinition Spring启动的时候会进行扫描&#xff0c;会先调用 org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents(String basePackage) 扫描某个包路径&#xff0c;并得到BeanDefini…

ML:2-2neural network layer

文章目录 1. 神经网络层2. 更复杂的神经网络3. 神经网络的前向传播 【吴恩达机器学习笔记p47-49】 1. 神经网络层 input&#xff1a;4个数字的向量。3个神经元分别做logistic regression。下角标&#xff1a;标识第 i 个神经元的值。上角标&#xff1a;表示第 j 层layer的值。…

打PTA 分数 15

传说这是集美大学的学生对话。本题要求你做一个简单的自动问答机&#xff0c;对任何一个问句&#xff0c;只要其中包含 PTA 就回答 Yes!&#xff0c;其他一概回答 No.。 输入格式&#xff1a; 输入第一行给出一个整型范围内的正整数 N&#xff0c;随后 N 行&#xff0c;每行给…

单片机原理及应用:中断系统结构与控制寄存器

大家好啊&#xff0c;这几天因为考试断更了一段时间&#xff0c;现在放假了也可以恢复正常的更新速度了。今天我们来认识一下单片机的中断系统&#xff0c;这里可以说是我们学习单片机以来第一个核心功能&#xff0c;我们会分几期内容来深入了解中断系统的作用原理和应用方式。…

系列十五、Java中常见的修饰符

一、Java中常见的修饰符 1.1、概述 Java中常见的修饰符有&#xff1a;默认、private&#xff08;私有&#xff09;、protected&#xff08;保护&#xff09;、public&#xff08;公有&#xff09;&#xff0c;访问修饰符可以修饰成员变量、方法。 1.2、详解 private &#xff…

搜索插入位置【二分查找】

Problem: 35. 搜索插入位置 文章目录 思路 & 解题方法复杂度调用函数手写 思路 & 解题方法 二分查找&#xff0c;可以手写一下&#xff0c;也可以直接用bisect。 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( l o g n ) O(logn) O(logn) 空间复杂度: 添…

vue+springboot+mybatis-plus实现乡村公共文化服务系统

项目前端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-front 项目后端&#xff1a;https://gitee.com/anxin-personal-project/rural-public-cultural-services-behind 1.系统简介 乡村公共服务文化提供给管理员、商家、村民。管理…

python爬虫实战(6)--获取某度热榜

1. 项目描述 需要用到的类库 pip install requests pip install beautifulsoup4 pip install pandas pip install openpyxl然后&#xff0c;我们来编写python脚本&#xff0c;并引入需要的库&#xff1a; import requests from bs4 import BeautifulSoup import pandas as p…

36-javascript输出方式,弹框:普通,confirm弹框,prompt弹框,控制台输出:普通,warm,error

1.页面打印 <body><p>你真是一个小机灵鬼</p><script>// 页面打印document.write("打印内容");</script> </body> 2.覆盖文档 <body><p>你真是一个小机灵鬼</p><script>// 覆盖文档window.onload f…

如何定位linux系统内存使用的问题?

在Ubuntu系统中&#xff0c;定位内存使用问题通常涉及查看总体内存使用情况、识别占用内存较大的进程以及深入分析特定进程的内存消耗。以下是一系列详细步骤&#xff1a; 检查整体内存使用情况&#xff1a; 使用free命令查看系统内存使用总量、已用内存和可用内存&#xff1a;…

java 面试题框架篇

java 面试题框架篇 文章目录 java 面试题框架篇**面试官**&#xff1a;Spring框架中的单例bean是线程安全的吗&#xff1f;**面试官**&#xff1a;什么是AOP**面试官**&#xff1a;你们项目中有没有使用到AOP**面试官**&#xff1a;Spring中的事务是如何实现的**面试官**&#…

用Java编写图书网站信息采集程序教程

目录 一、准备工作 二、分析目标网站结构 三、选择信息采集方式 四、安装Jsoup库 五、编写信息采集程序 六、注意事项 总结&#xff1a; 编写图书网站信息采集程序需要掌握HTML、CSS、JavaScript、Java等前端和后端技术。下面是一个简单的教程&#xff0c;介绍如何使用…