【Qt】常用控件(一)
- 其他
- 2025-08-26 05:03:01

常用控件 一、控件1、介绍2、自定义控件3、使用4、注意事项 二、enabled1、介绍2、示例 三、geometry1、介绍2、坐标系3、示例(1)移动按钮位置(2)reject按钮移动 四、Windowsframe1、介绍2、影响3、与Window Frame相关的API4、示例(1)geometry和frameGeometry,坐标系的差别。(2)设置窗口标题(2)设置窗口图标 五、qrc文件1、介绍2、使用qrc文件3、优点4、使用示例 六、windowOpacity1、介绍2、注意事项3、示例 七、cursor1、介绍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);
本文到这里就结束了,如有错误或者不清楚的地方欢迎评论或者私信 本文只是在学习过程中所做的总结,不会涉及过深的概念 创作不易,如果觉得博主写得不错,请点赞、收藏加关注支持一下💕💕💕
【Qt】常用控件(一)由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Qt】常用控件(一)”
上一篇
网络原理-