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