前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【QT】常用控件(一)

【QT】常用控件(一)

作者头像
s-little-monster
发布2024-10-15 13:53:20
980
发布2024-10-15 13:53:20
举报
文章被收录于专栏:乐意学点小编程

一、控件是什么

ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满足不同的需求

二、QWidget核心属性

1、enabled

API

说明

isEnabled

获取到控件的可用状态

setEnabled

设置控件是否可用

我们来写一个用一个按钮控制另一个按钮可用状态的QT程序

我比较喜欢用ui界面转到槽的方式写QT程序

代码语言:javascript
复制
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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


void Widget::on_pushButton_control_clicked()
{
    if(ui->pushButton->isEnabled() == true)
        ui->pushButton->setEnabled(false);
    else
        ui->pushButton->setEnabled(true);
}

void Widget::on_pushButton_clicked()
{
    qDebug() << "可以使用";
}

当将控件设置为不可用时,颜色偏暗淡,不可点击

视频地址:https://live.csdn.net/v/embed/427784

2、geometry

API

说明

geometry()

获取到控件的位置和尺寸,返回的结果是QRect,包含x,y,width,height,其中x和y是左上角坐标

setGeometry(QRect) / setGeometry(int x,int y,int width,int height)

设置空间的位置和尺寸,分为两种方式

geometry在中文里是几何的意思,表示一个物体的几何性质,它有四个参数以表示空间的几何性质,左上角的坐标x,y以及控件的宽度和高度

geometry_1:https://live.csdn.net/v/embed/427947

geometry_2:https://live.csdn.net/v/embed/427948

第一个视频仅控制左上角坐标,这样会导致width和height跟着变化,因为我们用的是setX和setY,强制改变了左上角坐标 第二个视频的效果也可以直接使用move函数进行控制

这里还有一个有趣的程序

代码语言:javascript
复制
#include "widget.h"
#include "ui_widget.h"

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

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


void Widget::on_pushButton_clicked()
{
    ui->label->setText("感谢导员,我出去玩了");
}

void Widget::on_pushButton_2_clicked()
{
    int width = this->geometry().width();
    //获取窗口宽度
    int height = this->geometry().height();
    //获取窗口高度
    int x = rand() % width;
    int y = rand() % height;
    //保证按钮在窗口内

    //这里用的move
    ui->pushButton_2->move(x, y);

}

geometry_3:https://live.csdn.net/v/embed/427949

我们知道,窗口都会带有下面红色方框中的内容,这个东西叫做window frame,我们在使用geometry的时候的x,y是不包含这个的,要想使用window frame的左上角就要用frameGeometry这个函数

通过geometry和frameGeometry就可以实现整个窗口以及控件的移动操作,但是我们有很多的API,虽然设计的比较冗余,但是QT一个特点就是尽量符合人的直觉,就是我们有可能不用通过官方文档就能把程序写对

3、windowTitle

API

说明

windowTitle

获取到控件的窗口标题

setWindowTitle(const QString& title)

设置控件的窗口标题

4、windowIcon

API

说明

windowIcon()

获取到控件的窗口图标,返回QIcon对象

setWindowIcon(const QIcon& icon)

设置控件的窗口图标

窗口和任务栏图标都会变成设置成的照片

但是我们一般不会通过文件的绝对路径引入照片,因为我们无法保证我D盘中的图片在你的D盘当中也有,我们还有两种办法,一种是相对路径,另一种是使用qrc,相对路径的方法就是在该项目的工作目录中建一个新的文件夹用来专门存放图片,比如文件夹的名字叫做photo,当我们需要使用时写"./photo/slm.jpg",但是这样的话还是会因为用户误删而导致照片无法使用,这时对于这种图片一类的小文件,我们可以使用qrc来直接将图片转化为二进制代码存储在项目当中,这样就永远不会丢失了

右键点击Add New,选择Qt resource file,起一个英文名字,这里叫resource file

点击Add Prefix,将前缀改为/

然后点击Add Files,将要加入的图片放到qrc文件的同级目录中,下面是添加完毕的效果

在代码中这样使用:

这里的 : 作为开头,表示从qrc中读取资源 这里的 / 是上面配置的前缀 这里的 slm.jpg 是资源名称

qrc适合管理小的资源,对图片类的很有效,不过对于视频一类的大资源是不行的,因为这会导致exe文件也变大

5、windowOpacity

API

说明

windowOpacity()

获取到控件的不透明数值,返回float,取值为0.0~1.0,0.0表示透明,1.0表示完全不透明

setWindowOpacity(float n)

设置控件的不透明数值

opacity_1:https://live.csdn.net/v/embed/427952

6、cursor

API

说明

cursor()

获取到当前widget的cursor属性,返回QCursor对象,当鼠标悬停在该widget上时,就会显示出对应的形状

setCursor(const QCursor& cursor)

设置该widget光标的形状,仅在鼠标停留在该widget上时生效

QGuiApplication::setOverrideCursor(const QCursor& cursor)

设置全局光标的形状,对整个程序中的所有widget都会生效,覆盖上面的setCursor设置的内容

我们可以直接通过属性栏来控制,也可以使用代码控制

cursor_1:https://live.csdn.net/v/embed/427950

代码版本:

cursor_2:https://live.csdn.net/v/embed/427951

这是系统内置的所有光标形状,是以一个枚举体来存储的

我们来将光标改变为自定义图片

首先使用qrc将图片加载进去,步骤如同上文,不再赘述,然后定义一个位图对象加载并缩放图片,然后将图片设置为光标形状

代码语言:javascript
复制
#include "widget.h"
#include "ui_widget.h"

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

    QPixmap pixmap(":/slm.jpg");//创建位图对象并加载自定义图片

    pixmap = pixmap.scaled(32,32);//缩放图片为32*32

    QCursor cursor(pixmap,3,3);//这里的3,3是热点的位置,也就是点击时的有效位置

    this->setCursor(cursor);
}

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

cursor:https://live.csdn.net/v/embed/427955

7、font

API

说明

font()

获取当前widget的字体信息,返回QFont对象

setFont(const QFont& font)

设置当前widget字体信息

这里的QFont有七种属性 family:字体 pointSize:字体大小 weight:字体粗细 bold:是否加粗 italic:是否倾斜 underline:是否有下划线 strikeOut:是否有删除线

我们可以通过属性面板直接设置

也可以通过代码和ui一起实现

8、toolTip

API

说明

setToolTip

设置toolTip,鼠标悬停时会有提示说明

setToolTipDuring

设置toolTip提示的时间

视频地址:https://live.csdn.net/v/embed/427956

9、focusPolicy

API

说明

focusPolicy()

获取该widget的focusPolicy,返回Qt::FocusPolicy

setFocusPolicy(Qt::FocusPolicy)

设置widget的focusPolicy

Qt::FocusPolicy是一个枚举类型,取值如下

代码语言:javascript
复制
enum FocusPolicy {
        NoFocus = 0,//控件不会接收键盘焦点
        TabFocus = 0x1,//控件可以通过Tab键接收焦点
        ClickFocus = 0x2,//控件在鼠标点击时接收焦点
        StrongFocus = TabFocus | ClickFocus | 0x8,//控件可以通过Tab键和鼠标点击接收焦点(默认)
        WheelFocus = StrongFocus | 0x4//在上一条的基础上增加鼠标滚轮获取焦点
    };

这个就不必多说了,只要是平常玩玩电脑的看完这些解释都就知道这个焦点的概念,虽然不好说出来,但是抽象的概念大家都是有的,当我们给控件设置这些枚举值时会达到对应的效果

10、styleSheet

通过QSS设置widget的样式,QSS是QT借鉴CSS的,只支持CSS其中的一部分

当然这里的color不是只有我们认识的那几个单词的颜色,自然界的颜色有无数种,在计算机中,颜色是由一个个像素光点显示的,它通过RGB,也就是red,green,blue三种颜色的深浅来控制可以形成所有的颜色,对于8位深度的显示器来说,它们每一个颜色深度都是由一个字节来存储的,也就是说电脑能够呈现的颜色有256256256种,也就是1600多万种,对于更高规格的显示器这个数字会更多

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、控件是什么
  • 二、QWidget核心属性
    • 1、enabled
      • 2、geometry
        • 3、windowTitle
          • 4、windowIcon
            • 5、windowOpacity
              • 6、cursor
                • 7、font
                  • 8、toolTip
                    • 9、focusPolicy
                      • 10、styleSheet
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档