QT C++(QWidget类及其常见的属性)

文章目录

  • 1. QWidget类及其常见的属性

1. QWidget类及其常见的属性

QT各种控件都是继承自QWidget类,QWidget类是QT控件体系中通用的部分。

QWidget属性如下图
在这里插入图片描述

常见的QT属性为:

  1. enabled:描述控件是否处于可用状态(禁用状态这个控件不能接受用户输入的事件,其子元素也会被禁用)

    isEnabled():获取控件可用状态

    setEnable():设置控件可用状态

    在这里插入图片描述

  2. geometry:控件左上角位置(相对于父元素)和控件的尺寸

    geometry():获取到控件的位置和尺寸,返回结果为QRect,包含了x,y,width,height

    setGeometry(QRect):设置控件大小位置

    setGeometry(int x, int y, int width, int height):设置控件大小位置

    void Widget::on_pushButtonUp_clicked()
    {
        QRect pos=ui->pushButton->geometry();
        qDebug()<<pos;
        pos.setY(pos.y()-5);
        ui->pushButton->setGeometry(pos);
    }
    

    Window Frame对geometry属性的影响:QT关于位置尺寸提供很多API,有的API位置信息是Widget本体坐上角为原点的(不考虑Window Frame即窗口边框)上述的API都是不考虑Window Frame的。而frameGeometry则考虑了窗口边框

  3. windowTitle:窗口标题

    windowTitle():获取控件窗口标题

    setWindowTitle():设置控件窗口标题

  4. windowIcon:窗口图标,api只能针对顶层窗口使用

    windowIcon():获取到控件的窗口图标,返回QIcon对象(QIcon不支持对象树机制,建议将对象上创建在栈上)

    setWindowIcon(const QIcon&):设置窗口,任务栏图标

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置窗口图标
        QIcon icon("../test.jpg");
        this->setWindowIcon(icon);
    }
    

    在这里插入图片描述

    qrc机制:确保图片所在的路径在用户机器上存在,且不会被用户删除。
    给QT引入一个.qrc(xml)文件,在这个文件中将图片资源导入进来,并在xml中记录。后续QT编译时会将图片内容的二进制数据,将这些二进制数据转化为C++代码,最终编译到exe文件中。但是qrc无法导入太大的资源文件。当程序运行后程序被加载到内存上

    qrc使用:

    • 创建一个qrc文件

      在这里插入图片描述

    • 将图片导入到qrc中:先创建前缀prefix(虚拟目录)然后导入图片到prefix(虚拟路径)下

      在这里插入图片描述

      导入的图片时图片位置必须在.qrc的同级目录或者子目录下
      在这里插入图片描述
      在这里插入图片描述
      在项目中使用自定义的prefix,虚拟路径即可访问到图片了。路径上带:即可

      Widget::Widget(QWidget *parent)
          : QWidget(parent)
          , ui(new Ui::Widget)
      {
          ui->setupUi(this);
          //通过导入的资源访问
          QIcon icon(":/test.jpg");
          this->setWindowIcon(icon);
      }
      
      
  5. windowOpacity属性:窗口透明度 1.0: 完全不透明 0.0: 完全透明

    windowOpacity():获得窗口透明度

    setWindowOpacity():设置窗口不透明度

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

    根据打印的窗口的不透明度的值可知,窗口不透明变化并不是0.1这样的精确变化的。因为浮点数的存储在机器中不是精确的

  6. cursor属性:修改窗口光标样式

    cursor():获取到当前窗口的光标属性,返回QCursor对象,当光标悬停到该窗口上时会显示对应的形状

    setCursor(const QCursor&):设置该窗口的光标样式,只在鼠标在该窗口上生效。

    QGuiApplication::setOverrideCursor(const QCursor&):设置全局光标属性,对整个程序中的所有窗口都生效,覆盖setCursor设置的属性

    在这里插入图片描述

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QCursor cursor(Qt::WaitCursor);//设置按钮为等待图标
        ui->pushButton->setCursor(cursor);
    }
    

    Qt通过自定义图片设定光标:和设置窗口图标方式一致,把图片导入项目中(.qrc管理),在代码处访问到这个图片,通过这个图片构造光标对象并设置。 QPixmap这个对象就代表一个图片。如果选择图片的图片尺寸比较大,可以进行缩放。(图标资源可以搜索阿里巴巴矢量图标库)

    注意:自定义图片默认情况点击是图片左上角位置点击,可以修改点击生效位置。

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置这个窗口光标为自定义图片
        QPixmap pixmap(":/cursor.png");
        //对图片进行缩放为50×50
        pixmap=pixmap.scaled(50,50);
        //构造光标对象
        QCursor my_cursor(pixmap,10,10);//10,10代表鼠标点击生效位置,图片左上角默认为0,0
        this->setCursor(my_cursor);
    }
    
  7. font属性:窗口字体属性

    font():获取当前窗口的字体信息,返回QFont对象

    setFont(const QFont&font):设置当前窗口的字体信息

     QFont属性:
     - family:字体家族,eg:宋体,微软雅黑等
     - pointSize:文字大小,单位是像素
     - weight:文字粗细,0-99,数字越大越粗
     - bold:是否加粗
     - italic:是否倾斜
     - underline:是否有下划线
     - strikeOut:是否带有删除线
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        QLabel* label=new QLabel(this);
        label->setText("文本样式");
        QFont font;
        font.setFamily("仿宋");
        font.setPixelSize(30);
        font.setBold(true);
        font.setItalic(true);
        font.setUnderline(true);
        font.setStrikeOut(true);
        label->setFont(font);
        label->move(10,10);
    }
    

    在这里插入图片描述

  8. toolTip属性:设置窗口悬停时的说明

    setToolTip:设置toolTip,鼠标悬停在该窗口会有提示说明

    setToolTipDuration:设置toolTip显示时间,单位ms。超时后toolTip会自动消失

    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //设置按钮的toolTip
        ui->Yes->setToolTip("按钮说明yes");
        ui->Yes->setToolTipDuration(1000);
    }
    
  9. focusPolicy:设置控件获取到焦点的策略,例如某个控件能否被鼠标选中,或者能否被tab选中

    focusPolicy():获取这个窗口的focusPolicy,返回Qt::FocusPoliy

    setFocusPolicy():设置窗口的focusPolicy

     注意:Qt::FocusPoliy是一个枚举类型,取值如下
     - Qt::NoFocus:控件不会接受键盘焦点
     - Qt::TabFocus:控件可以接受tab键焦点
     - Qt::ClickFocus:控件在鼠标点击时接受焦点
     - Qt::StrongFocus:控件在鼠标点击,tab键时接受焦点(默认)
     - Qt::WheelFocus:控件在点击,tab键,鼠标滚轮时获得焦点
    

    在这里插入图片描述

  10. styleSheet属性:样式表,通过QSS设置窗口样式。
    在这里插入图片描述
    QSS和CSS类似,设置样式使用键值对的形式

    键与值之间使用:分割,键值对之间用;分割
    在这里插入图片描述

    在这里插入图片描述

    //切换窗口样式
    void Widget::on_pushButton_clicked()
    {
        //获取当前窗口样式
        QString str=this->styleSheet();
        qDebug()<<str;
        if(str!="background-color: black;"){
            //设置窗口样式
            this->setStyleSheet("background-color: black;");
            //设置输入框的样式
            ui->textEdit->setStyleSheet("background-color: black; color:white");
            //设置按钮样式
            ui->pushButton->setStyleSheet("color:white");
        }else{
            //设置窗口样式
            this->setStyleSheet("background-color: rgb(240,240,240);");
            //设置输入框的样式
            ui->textEdit->setStyleSheet("background-color: rgb(240,240,240); color:black");
            //设置按钮样式
            ui->pushButton->setStyleSheet("color:black");
        }
    }
    

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

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

相关文章

民航电子数据库:select查询时部分字段缺失

目录 前言异常排查原因解决使用systemPath标签引入本地Jar包后无法打包 前言 1、对接民航电子数据库 2、框架为shardingsphere caedb mybatis 3、部分SQL查询时&#xff0c;会出现字段缺失的情况 4、查看日志打印出来的SQL&#xff0c;字段并未缺失 异常 这里省略SQL语句…

数字水印 | 数字水印技术原理入门

&#x1f34d;原文&#xff1a; 基于小波变换的数字水印技术 &#x1f34d;写在前面&#xff1a; 本文属搬运博客&#xff0c;自己留存学习。虽然原文标题聚焦于 “小波变换”&#xff0c;但实际上原文介绍了数字水印技术的整体情况。 前言 离散小波变换不仅可以较好地匹配人…

各种行业里的副业项目,你适合哪一类

你希望在周末能够请自己吃一顿豪华大餐嘛&#xff1f;哈哈&#xff0c;但问题来了&#xff0c;自己的收入勉强够支付生活开销&#xff0c;不足以让自己有额外的消费&#xff0c;这样的生活小调调怎么满足呢&#xff0c;那就一起通过副业来实现吧&#xff01; 面对五花八门的副业…

第⼀个SpringBoot程序

Spring Boot介绍 Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单性和⽣产⼒的关注使其成为 世界上最流⾏的Java框架。 Spring Boot 的诞⽣是为了简化 Spring 项目而诞生的 创建Spring Boot项目 File->New Project->Spring Initializr 选择2.多的版本 创建…

群辉虚拟机安装openWRT作旁路由

最近在整活旁路由&#xff0c;基本就是要实现adguard和出国留学。openwrt这个的安装比较简单&#xff0c;就是先去找个镜像&#xff0c;然后导入即可。 我这里最后是去github上找了个大佬每天编译的地址链接。我用的是这个版本 1.下载解压得到img 下载完之后解压会得到一个…

YOLOv5改进 | 注意力机制 | 通道和空间的双重作用的CBAM注意力机制

在深度学习目标检测领域&#xff0c;YOLOv5成为了备受关注的模型之一。本文给大家带来的是通道和空间的双重作用的CBAM注意力机制。文章在介绍主要的原理后&#xff0c;将手把手教学如何进行模块的代码添加和修改&#xff0c;并将修改后的完整代码放在文章的最后&#xff0c;方…

【云原生】 Kubernetes核心概念

目录 引言 一、部署方式回溯 &#xff08;一&#xff09;传统部署时代 &#xff08;二&#xff09;虚拟化部署时代 &#xff08;三&#xff09;容器部署时代 二、Kubernetes基本介绍 &#xff08;一&#xff09;为什么使用k8s &#xff08;二&#xff09;主要功能 &am…

【JVM】Class文件的格式

目录 概述 Class文件的格式 概述 Class文件是JVM的输入&#xff0c;Java虚拟机规范中定义了Class文件的结构。Class文件是JVM实现平台无关、技术无关的基础。 1:Class文件是一组以8字节为单位的字节流&#xff0c;各个数据项目按顺序紧凑排列 2:对于占用空间大于8字节的数据…

BGP学习一:关于对等体建立和状态组改变

目录 一.BGP基本概念 &#xff08;1&#xff09;.BGP即是协议也是分类 1.早期EGP 2.BGP满足不同需求 3.BGP区域间传输的优势 &#xff08;1&#xff09;安全性——只传递路由信息 &#xff08;2&#xff09;跨网段建立邻居 4.BGP总结 5.BGP的应用 &#xff08;1&#…

力扣HOT100 - 295. 数据流的中位数

解题思路&#xff1a; 小顶堆 大顶堆 class MedianFinder {Queue<Integer> A, B;public MedianFinder() {A new PriorityQueue<>();B new PriorityQueue<>((x, y) -> (y - x));}public void addNum(int num) {if (A.size() ! B.size()) {A.add(num);B…

如何在Mac 电脑上安装 Homebrew

1、打开终端应用程序 在终端中输入以下命令并回车: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 这个命令会自动下载并运行 Homebrew 的安装脚本。 系统可能会提示您输入管理员密码,请输入您的 Mac 登录…

Django国际化与本地化指南

title: Django国际化与本地化指南 date: 2024/5/12 16:51:04 updated: 2024/5/12 16:51:04 categories: 后端开发 tags: Django-i18n本地化-L10n多语言国际化翻译工具表单验证性能优化 引言 在数字化时代&#xff0c;网站和应用程序必须跨越地域限制&#xff0c;服务于全球…

【MySQL】聊聊你不知道的前缀索引原理以及使用场景

背景 在本周的时候&#xff0c;接到一个需求&#xff0c;需要通过加密后的身份证 md5 去数据库里匹配。由于业务方存储的是身份证 md5username 构建的一列&#xff0c;并且没有加索引。 解决方案&#xff1a;1.新建一列 md5的列&#xff0c;加索引 2.对现有的列进行加前缀索引…

【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码

首先&#xff0c;让我们了解一下ITVBox如意版影视源码的特点和优势。这一源码基于先进的技术和框架开发&#xff0c;具有稳定、高效的性能&#xff0c;能够满足影视网站的各种需求。与此同时&#xff0c;该源码还提供了丰富的功能和模块&#xff0c;包括影视资源管理、会员系统…

攻防世界-web-file_include

题目 解题 通过阅读php代码&#xff0c;我们明显的可以发现&#xff0c;这个一个文件包含的类型题 文件包含漏洞也是一种“注入型漏洞”&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务器端执行。 require()&#xff0c;找不到被包含的文件时…

57. 【Android教程】相机:Camera

相机现在已经不仅仅是手机必备神器了&#xff0c;甚至相机的拍照质量已经是很多人买手机的首选条件了。而对于相机而言主要有两大功能&#xff1a;拍照片和拍视频。Android 为此两种方式&#xff1a; 相机 intent相机 API 本节我们就一起来看看相机的具体用法。 1. 打开 Camer…

Windows快速部署DCNv4(成功版)

文章目录 一、介绍二、编译DCNv42.1 下载源码2.2 编译DCNv4 三、报错提示3.1 Cuda is not available3.2 需要Microsoft Visual C 14.0 一、介绍 论文链接&#xff1a;[https://arxiv.org/pdf/2401.06197.pdf] (https://arxiv.org/pdf/2401.06197.pdf)   在这篇文章中介绍了一…

8种区块链开发者必须知道的顶级编程语言!

我来问你一个问题&#xff1a;请说出一种技术&#xff0c;它以去中心化、不可篡改和透明性等核心特征席卷了全球。 这个问题的答案是&#xff0c;当然是区块链&#xff0c;它在近些年进入大家的视野并颠覆了工商业&#xff0c;没有任何其他技术能够做到这一点。 预计从2020年…

通过python实现Google的精准搜索

问题背景&#xff1a; 我想通过Google或者其他网站通过精准搜索确认该产品是否存在&#xff0c;但是即使该产品不存在Google也会返回一些相关的url链接&#xff0c;现在想通过python实现搜索结果的精准匹配以确认该产品是否为正确的名称【可以通过google搜索到&#xff0c;如果…

Git的安装和配置

一、Git的介绍 代码的一套托管工具&#xff0c;它分为两个仓库&#xff0c;首先将你写的代码提交到本地仓库&#xff0c;这个时候只有你可以看&#xff0c;和你一起开发的同事看不到。将本地仓库的代码推到远程仓库&#xff08;githab、gitee、gitlab等之一&#xff09;&#…