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

【Qt】常用控件(一)

常用控件

  • 一、控件
    • 1、介绍
    • 2、自定义控件
    • 3、使用
    • 4、注意事项
  • 二、enabled
    • 1、介绍
    • 2、示例
  • 三、geometry
    • 1、介绍
    • 2、坐标系
    • 3、示例
      • (1)移动按钮位置
      • (2)reject按钮移动
  • 四、Windowsframe
    • 1、介绍
    • 2、影响
    • 3、与Window Frame相关的API
    • 4、示例
      • (1)geometry和frameGeometry,坐标系的差别。
      • (2)设置窗口标题
      • (2)设置窗口图标
  • 五、qrc文件
    • 1、介绍
    • 2、使用qrc文件
    • 3、优点
    • 4、使用示例
  • 六、windowOpacity
    • 1、介绍
    • 2、注意事项
    • 3、示例
  • 七、cursor
    • 1、介绍
    • 2、示例

一、控件

1、介绍

  • Qt控件是Qt用户界面上最基本的组件类型,也是构成用户界面的基本结构。
  • QWidget类是Qt控件的基类,也是所有控件的父类。所有的Qt控件都是QWidget类的子类,因此都继承了QWidget类的特性。
特性
接收用户的输入事件,如鼠标和键盘输入
在用户界面上显示控件内容
存放其它控件

2、自定义控件

  • 在实际开发过程中,许多应用需要满足特定的用户界面需求,因此Qt提供了自定义控件的功能。
  • 自定义控件是指使用Qt的基础控件和功能,通过扩展和重写来满足特定需求的控件。
  • 自定义控件通常是从QWidget类继承而来的,开发者需要创建一个新的类,并在该类中重写必要的函数,如paintEvent、mousePressEvent等,以实现自定义的外观和行为。

3、使用

  • 使用Qt Designer:Qt Designer是Qt提供的一个图形界面设计工具,开发者可以在其中拖拽控件到窗体上,并设置控件的属性。
  • 纯代码添加控件:开发者可以通过纯代码的方式添加控件。这种方式需要手动创建控件对象,并设置其属性和事件处理函数。

4、注意事项

  • 在使用控件时,需要注意控件的父子关系。如果控件没有设置父控件,那么它就是一个独立的窗口。
  • 在设置控件的属性时,需要确保属性的值是有效的,否则可能会导致控件的行为异常。
  • 在处理控件的事件时,需要注意事件的触发条件和处理逻辑,以确保控件能够正确地响应用户的操作。

二、enabled

1、介绍

  • enabled属性通常用于控制控件(如按钮、菜单项、窗口部件等)是否可用或是否处于启用状态。当一个控件被禁用时,用户无法与之交互,通常会显示为灰色或暗淡。如果⼀个widget被禁用,则该widget的子元素也被禁用。
方法说明
setEnabled(bool)用于设置控件的启用状态。当参数为true时,控件变为启用状态,允许用户进行交互;当参数为false时,控件变为禁用状态,通常显示为灰色,且用户无法与之交互
isEnabled() const用于查询控件当前的启用状态。如果控件处于启用状态,则返回true;如果控件被禁用,则返回false

2、示例

  • 下方代码在widget.cpp文件中所写,实现的是两个按钮,第一个为测试禁用,第二个有切换第一个的禁用状态。
void Widget::on_pushButton_clicked()
{
    qDebug() << "on_pushButton_clicked";
}


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

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

三、geometry

1、介绍

  • geometry用于描述窗口控件的位置和大小。这个属性可以视为是四个属性的统称,即x(横坐标)、y(纵坐标)、width(宽度)和height(高度)。
  • 它返回一个QRect对象,该对象包含了窗口控件的左上角坐标以及宽度和高度信息。
方法说明
geometry()获取当前窗口控件的geometry属性。该函数返回一个QRect对象,通过该对象可以访问x、y、width和height等属性。即该对象包含了窗口控件的左上角坐标以及宽度和高度信息
setGeometry(int x, int y, int width, int height),setGeometry(QRect)设置当前窗口控件的geometry属性

2、坐标系

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

3、示例

(1)移动按钮位置

widget.cpp

void Widget::on_pushButton_up_clicked()
{
    QRect rect = ui->pushButton_target->geometry();         // 不能是rect方法,否则在下面的设置时,x和y的值都是0
    qDebug() << rect;
    // rect.setY(rect.y() - 2);
    // ui->pushButton_target->setGeometry(rect);

    ui->pushButton_target->setGeometry(rect.x(),rect.y() - 2, rect.width(), rect.height());

}


void Widget::on_pushButton_down_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    qDebug() << rect;
    ui->pushButton_target->setGeometry(rect.x(),rect.y() + 2, rect.width(), rect.height());
}


void Widget::on_pushButton_left_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    qDebug() << rect;
    ui->pushButton_target->setGeometry(rect.x() - 2,rect.y(), rect.width(), rect.height());
}


void Widget::on_pushButton_right_clicked()
{
    QRect rect = ui->pushButton_target->geometry();
    qDebug() << rect;
    ui->pushButton_target->setGeometry(rect.x() + 2,rect.y(), rect.width(), rect.height());
}

在这里插入图片描述

(2)reject按钮移动

void Widget::on_pushButton_accept_clicked()
{
    ui->label->setText("少年,加油,你此时的头发还很茂盛");
}


void Widget::on_pushButton_reject_clicked()
{
    // int width = ui->label->geometry().width();
    // int height = ui->label->geometry().height();

    // int newWidth = rand() % width;
    // int newHeight = rand() % height;

    // ui->pushButton_reject->move(newWidth, newHeight);
}


void Widget::on_pushButton_reject_pressed()
{
    int width = ui->label->geometry().width();
    int height = ui->label->geometry().height();

    int newWidth = rand() % width;
    int newHeight = rand() % height;

    ui->pushButton_reject->move(newWidth, newHeight);
}

在这里插入图片描述

四、Windowsframe

1、介绍

  • Window Frame(窗口框架)是指操作系统自带的窗口边框,它通常包围在窗口主体周围,并包含一些操作系统级别的控件,如最小化、最大化和关闭按钮,以及窗口标题栏等。这个窗口框架对Qt应用程序的界面布局和坐标系统有一定的影响。

2、影响

  • 坐标系统:在Qt中,控件的坐标系统通常是以其父控件为参考的。然而,当涉及到窗口框架时,情况就变得有些复杂。有些Qt API是以窗口主体(即不考虑窗口框架的部分)为参考点的,而有些则是以窗口框架的左上角为参考点。例如,geometry()和setGeometry()函数通常是以窗口主体为参考点,不考虑窗口框架;而frameGeometry()和setFrameGeometry()函数则是以窗口框架为参考点。
  • 界面布局:窗口框架的存在会影响窗口内部控件的布局。由于窗口框架占据了一定的空间,因此在进行界面设计时,需要考虑到这一点,以确保控件能够正确地显示在预期的位置。
  • 窗口大小调整:当用户调整窗口大小时,窗口框架的大小也会相应改变。Qt提供了相应的事件和函数来处理这种情况,允许开发人员根据窗口大小的变化来调整内部控件的布局或大小。

3、与Window Frame相关的API

API说明
frameGeometry()返回包含窗口框架的几何形状(位置和大小)
setFrameGeometry()设置包含窗口框架的几何形状
windowTitle()获取窗口的标题
setWindowTitle(const QString& title)设置窗口的标题
windowIcon()获取窗口的图标,返回QIcon对象
setWindowIcon(const QIcon& icon)设置窗口的图标

4、示例

(1)geometry和frameGeometry,坐标系的差别。

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->pushButton, &QPushButton::clicked, this, &Widget::handler);
}
void Widget::handler()
{
    QRect rect1 = this->geometry();
    QRect rect2 = this->frameGeometry();

    qDebug() << rect1;
    qDebug() << rect2;
}

在这里插入图片描述

  • 如果不使用slots(槽函数),而在构造方法中进行输出查看。因为Widget刚刚创建,还没有加入到对象树中,此时也就不具备Window frame。
  • 在按钮的slots中,由于用户点击的时候,对象树已经构造好了。此时Widget已经具备了Windowframe。此时,geometry和frameGeometry在位置和尺寸才出现差异。

(2)设置窗口标题

this->setWindowTitle("窗口");

// QPushButton* button = new QPushButton(this);
// button->setText("按钮");
// button->move(300,300);
// button->setWindowTitle("修改");

在这里插入图片描述

  • 注释代码无作用,因为button控件的坐标系统是以其父控件为参考的。

(2)设置窗口图标

// QIcon icon("D:\\内容保存地\\图片保存地\\R-C.png");
// QIcon icon("D:/SoftwareContentStorageLocation/QtCode/3widget/img/R-C.png");
QIcon icon("D:\\SoftwareContentStorageLocation\\QtCode\\3widget\\img\\R-C.png");

this->setWindowIcon(icon);

在这里插入图片描述

五、qrc文件

1、介绍

  • qrc文件是一种资源文件,用于存储应用程序的资源,如图像、图标、音频文件等。这些资源在编译时被嵌入到应用程序的可执行文件中,从而在运行时无需单独打包或查找这些文件。
  • qrc文件采用XML格式来定义资源的路径和名称。

2、使用qrc文件

  • 创建qrc文件:创建一个.qrc文件,并在其中定义资源。
  • 添加资源:将图像、图标、音频文件等资源添加到项目的某个目录中,然后在.qrc文件中引用这些文件。
  • 编译资源:在Qt项目中,需要将.qrc文件添加到项目的.pro文件中,这样,在编译项目时,qmake工具会自动处理.qrc文件,并将资源嵌入到最终的可执行文件中。但默认是有的,不需要手动操作。
  • 访问资源:在代码中,可以使用QString的:qrc/路径语法来访问资源。

3、优点

  • 简化分发:由于资源被嵌入到可执行文件中,因此无需单独打包这些文件,简化了应用程序的分发。
  • 提高访问速度:资源在应用程序启动时就被加载到内存中,因此访问速度通常比从磁盘加载要快。
  • 便于管理:所有的资源都集中在一个或多个.qrc文件中,便于管理和维护。

4、使用示例

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

  • 文件名可按需修改。

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

QIcon icon(":/R-C.png");
this->setWindowIcon(icon);
  • 这里的": /“前缀表示资源文件的根路径,它是你在.qrc文件中通过prefix属性设置的。如果prefix属性被设置为其他值(如”/images"),则需要相应地调整路径(如":/images/R-C.png")。
    在这里插入图片描述

在这里插入图片描述

六、windowOpacity

1、介绍

  • windowOpacity 是 QWindow 类的一个属性,它用于设置窗口的不透明度(透明度)。即它允许开发者控制窗口的透明度。通过调整这个属性的值,可以使窗口部分或完全透明,从而创建各种视觉效果。
  • windowOpacity 的值范围是 0.0 到 1.0。其中,0.0 表示窗口完全透明。1.0 表示窗口完全不透明。
方法说明
windowOpacity()获取窗口当前的不透明度值。返回一个 float 类型的值,表示窗口的不透明度
setWindowOpacity(float opacity)设置窗口的不透明度。传入一个 float 类型的值作为参数,该值将作为窗口的新不透明度

2、注意事项

  • 当设置不透明度时,如果传入的值小于 0.0 或大于 1.0,setWindowOpacity 方法内部会进行判定,并且不会应用这些值。然而,为了编码的规范性和可读性,建议在调用此方法之前对传入的值进行验证。
  • 窗口的不透明度变化可能不是精确的,因为浮点数运算的精度限制。这通常不会影响视觉效果,但在进行精确计算时需要注意。

3、示例

  • 调整窗口透明度
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){
        return;
    }
    qDebug() << opacity;
    opacity -= 0.1;
    this->setWindowOpacity(opacity);
}

在这里插入图片描述

七、cursor

1、介绍

  • cursor 是一个与光标相关的属性或方法,它通常用于设置或获取窗口或控件的光标样式。它允许开发者为窗口或控件设置特定的光标样式,这些样式定义了当鼠标悬停在窗口或控件上时显示的光标形状。
  • Qt 提供了多种内置的光标样式,如普通箭头光标、等待光标、文本输入光标等,同时也允许开发者使用自定义的图片来设置光标。但使用自定义的图片来设置光标时,通常涉及到创建一个 QPixmap 对象,然后基于这个对象构造一个 QCursor 对象,并将其设置为窗口或控件的光标。
  • cursor 属性可以应用于任何继承自 QWidget 的类,包括窗口、按钮、标签等控件。
API说明参数
setCursor(const QCursor &cursor)设置窗口或控件的光标形状QCursor对象,表示要设置的光标形状
setCursor(const QPixmap &pixmap, int hotx, int hoty)使用自定义图片设置光标形状,并指定光标的热点位置QPixmap对象,表示自定义的光标图片。hotx和hoty,分别表示光标热点在图片中的x和y坐标
cursor()获取窗口或控件的当前光标对象。返回值QCursor对象,表示当前的光标形状

2、示例

  • 图形化使用
    在这里插入图片描述
  • 代码使用
QCursor cursor(Qt::WaitCursor);
ui->pushButton->setCursor(cursor);
  • Qt::CursorShape枚举,其中定义了Qt提供的内置光标形状。
    在这里插入图片描述
  • 使用自定义的图片设置光标。qrc的创建参见上面。
    在这里插入图片描述
QPixmap pim(":/1.png");
pim = pim.scaled(40, 40);           // 修改图片大小
QCursor cursor(pim, 10, 10);        // 热点位置
ui->pushButton->setCursor(cursor);

本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信
本文只是在学习过程中所做的总结,不会涉及过深的概念
创作不易,如果觉得博主写得不错,请点赞、收藏加关注支持一下💕💕💕

相关文章:

  • 【练习】【二分】力扣热题100 153. 寻找旋转排序数组中的最小值
  • C++ Qt建立一个HTTP服务器
  • 鸿蒙开发:V2版本装饰器之@Monitor装饰器
  • 阐解WiFi信号强度
  • Linux centOS7 bash编程小技巧
  • Vue3中的setup
  • Linux应用之构建命令行解释器(bash进程)
  • vue3之echarts柱状图-圆锥加自动轮播
  • 使用Termux将安卓手机变成随身AI服务器(page assist连接)
  • Pyrhon函数-装饰器第一部分250219
  • C程序设计(第5版)——谭浩强(2)
  • 构建简单RAG代码实现
  • java常见面试场景题
  • nodejs各版本下载地址 —— 筑梦之路
  • 【Java】泛型与集合篇 —— 泛型
  • virt-io 如何运行在 kvm windows 虚拟机上
  • rust学习三、基本类型
  • Spring框架基本使用(Maven详解)
  • 【二分搜索 C/C++】洛谷 P1873 EKO / 砍树
  • SAM C++ TensorRT(实时图像分割)
  • 讲武谈兵|朝鲜“崔贤”号驱逐舰下水,朝版“宙斯盾”战力如何?
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 大学2025丨对话深大人工智能学院负责人李坚强:产学研生态比“造天才”更重要
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长
  • 解放日报:这是一场需要定力和实力的“科技长征”