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

Qt 5.14.2 学习记录 —— 칠 QWidget 常用控件(2)

文章目录

  • 1、Window Frame
  • 2、windowTitle
  • 3、windowIcon
  • 4、qrc机制
  • 5、windowOpacity


1、Window Frame

在运行Qt程序后,除了用户做的界面,最上面还有一个框,这就是window frame框。对于界面的元素,它们的原点是Qt界面的左上角或window frame左上角。比如geometry(),setGeometry()是以界面左上角为原点,而frameGeometry()和setFrameGeometry()是以window frame左上角为原点的。

在这里插入图片描述

#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QRect rect1 = this->geometry();QRect rect2 = this->frameGeometry();qDebug() << rect1;qDebug() << rect2;}

代码在构造函数,那么如果运行直接就看,还在构造阶段,还看不到两个实际的区别。运用到对象上就看出来了。

// widget.h
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;
};// widget.cpp
#include <QPushButton>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* button = new QPushButton(this);button->setText("按钮");button->move(330, 250);connect(button, &QPushButton::clicked, this, &Widget::handle);
}void Widget::handle()
{QRect rect1 = this->geometry();QRect rect2 = this->frameGeometry();qDebug() << rect1;qDebug() << rect2;
}

2、windowTitle

只针对顶层窗口适用。修改窗口标题

在这里插入图片描述

拖一个按钮到界面,改一下槽函数

void Widget::on_pushButton_clicked()
{this->setWindowTitle("窗口标题");
}

3、windowIcon

只针对顶层窗口适用。修改窗口图标

在这里插入图片描述

QIcon就是一个图标。设置图标需要在本地存一个图片,但是路径不带中文,并且不写反斜杠\,会被当成转义字符。要么/,要么\。也可以用C++11的raw string来解决,即r(),括号里直接写原路径即可,

#include <QIcon>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 不在堆创建, 因为不需要依靠对象树来释放以及保障生命周期, 况且QIcon也不支持对象树// QIcon对象比较小, 设置到某个控件后它释放与否不影响图标显示QIcon icon("E:\\pexels-ithalu-dominguez-907485.jpg");this->setWindowIcon(icon);
}

也可以用相对机制。

4、qrc机制

给Qt项目引入一个额外的xml文件,后缀名为.qrc,在这个xml中把图片导入进去,并且在xml中记录。Qt在编译项目时,会根据qrc中描述的图片信息,找到图片内容,提取出图片的二进制数据,并转为C++代码,最终编译到exe中。最终代码里可以看到很大的char数组,就是图片的二进制数据。不过这样肯定就不能往qrc里导入太大资源了。

新建一个.qrc的项目

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

会自动在resource后面加上.qrc。
在这里插入图片描述

创建完成后出现这个画面:

在这里插入图片描述

把图片导入到qrc文件中,下面有图片显示。


1、创建前缀,意思是创建一个虚拟目录,为了Qt能够方便地访问到这个图片。点击Add Prefix:

在这里插入图片描述


2、导入图片,图片的路径必须在此qrc文件的同级目录或子目录下,点击Add Files,选择文件即可

在这里插入图片描述


3、回到之前的项目,用qrc中的图片来作为图标

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 不在堆创建, 因为不需要依靠对象树来释放以及保障生命周期, 况且QIcon也不支持对象树// QIcon对象比较小, 设置到某个控件后它释放与否不影响图标显示//QIcon icon("E:\\pexels-ithalu-dominguez-907485.jpg");QIcon icon(":/pexels-ithalu-dominguez-907485.jpg");this->setWindowIcon(icon);
}

生成的实时文件中,会多出一个qrc_resource.cpp文件。qrc中导入的图片资源,就会转成这个文件。文件中每个二进制数字表示图片中每个字节的数据。Qt项目编译时,这个cpp文件被一起编译到了exe中,当exe程序运行时,图片的数据就加载到内存了。

5、windowOpacity

毛玻璃效果。

在这里插入图片描述

setWindowOpacity(float n)设置控件的不透明值。

拖两个按钮,一个加一个减

void Widget::on_pushButton_add_clicked()
{float opacity = this->windowOpacity();if(opacity >= 1.0) return;qDebug() << opacity;opacity += 0.1;this->setWindowOpacity(opacity);
}void Widget::on_pushButton_sub_clicked()
{float opacity = this->windowOpacity();if(opacity <= 0.0) return;qDebug() << opacity;opacity -= 0.1;this->setWindowOpacity(opacity);
}

不过我也可以不加if判定,因为超过1.0和小于0.0的浮点数,setWindowOpacity方法内部也有判定,这些数字不会被设定进去。不过为了好的编写习惯,还是要写上判断。

结束。

http://www.lryc.cn/news/517604.html

相关文章:

  • 在vue3项目中利用自定义ref实现防抖
  • 服务器及MySQL安全设置指南
  • MDX语言的网络编程
  • client-go中watch机制的一些陷阱
  • Chrome访问https页面显示ERR_CERT_INVALID,且无法跳过继续访问
  • Jenkins pipeline 发送邮件及包含附件
  • 怎么把word试题转成excel?
  • 【机器学习】量子机器学习:当量子计算遇上人工智能,颠覆即将来临?
  • IDEA配置maven和git并如何使用maven打包和git推送到gitlab
  • Supermaven 加入 Cursor:AI 编码新篇章
  • 【2024华为OD-E卷-100分-boss的收入】(题目+思路+JavaC++Python解析)
  • 《Java8实战》汇总
  • Elasticsearch:搜索相关性
  • LeetCode 热题 100_二叉树展开为链表(46_114_中等_C++)(二叉树;先序遍历(递归+数组);先序遍历(递归))
  • uniapp实现在card卡片组件内为图片添加长按保存、识别二维码等功能
  • 最好用的图文识别OCR -- PaddleOCR(2) 提高推理效率(PPOCR模型转ONNX模型进行推理)
  • Redis--20--大Key问题解析
  • 新版2024AndroidStudio项目目录结构拆分
  • STM32内置Flash
  • 华为路由器、交换机、AC、新版本开局远程登录那些坑(Telnet、SSH/HTTP避坑指南)
  • 【Linux】深入理解进程信号机制:信号的产生、捕获与阻塞
  • 前端基础技术全解析:从HTML前端基础标签语言开始,逐步深入CSS样式修饰、JavaScript脚本控制、Ajax异步通信以及WebSocket持久通信
  • Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)
  • excel精简使用工具
  • Flutter鸿蒙化 在鸿蒙应用中添加Flutter页面
  • 为什么页面无法正确显示?都有哪些HTML和CSS相关问题?
  • 如何制作一份出色的公司介绍PPT?
  • Selenium 进行网页自动化操作的一个示例,绕过一些网站的自动化检测。python编程
  • HashMap和HashTable的区别
  • 使用redis来进行调优有哪些方案?