目录
一、QWidget核心属性
在Qt中使用QWidget类表示"控件",如按钮、视图、输入框、滚动条等具体的控件类,都是继承自Qwidget。可以认为QWidget中包含了Qt整个控件体系中的通用部分
属性 | 作用 |
---|---|
enabled | 设置控件是否可用(true为可用,false为禁用) |
geometry | 位置和尺寸,包含x、y、width、height四个部分 其中坐标是以父元素为参考进行设置的 |
windowTitle | 设置widget标题 |
windowIcon | 设置widget图标 |
windowOpacity | 设置widget的不透明度 |
cursor | 设置鼠标悬停时显示的图标 |
font | 字体相关属性 涉及到字体家族、字体大小、粗体、斜体、下划线 |
toolTip | 鼠标悬停在widget上会在状态栏中显示的提示信息 |
toolTipDuring | toolTip显示的持续时间 |
statusTip | widget状态发生改变时显示的提示信息(如按钮被按下) |
whatsThis | 鼠标悬停并按下alt + F1时,显示的帮助信息(显示在一个弹出的窗口中) |
styleSheet | 允许使用CSS来设置widget的样式 |
focusPolicy | 该widget如何获取到焦点
|
contextMenuPolicy | 上下文菜单的显示策略 |
locale | 设置语言与国家地区 |
acceptDrops | 该部件是否接受拖放操作 若设置为true,那么该部件就可以接收来自其他部件的拖放操作。当一个部件被拖放到该部件上时,该部件会接收到相应的接收事件(如dropEvent) 若设置为false,那么该部件不会接收任何拖放操作 |
minimumSize | 控件最小尺寸,包括最小宽度与最小高度 |
maximumSize | 控件最大尺寸,包括最大宽度和最大高度 |
sizePolicy | 尺寸策略,控制控件在布局管理器中的缩放方式 |
windowModality | 指定窗口是否具有"模态"行为 |
sizeIncrement | 拖动窗口大小时的增量单位 |
baseSize | 窗口的基础大小, |
palette | 调色板,可以设置widget的颜色风格 |
mouseTracking | 是否要跟踪鼠标移动事件 |
tableTracking | 是否跟踪触摸屏的移动事件(Qt5.9引进) |
layoutDirection | 布局方向 Qt::LeftToRight:文本从左到右排列(默认值) Qt::RightToLeft:文本从右到左排列 Qt::GlobalAtomics:部件的布局方向由全局原子性决定(即根据应用程序中的其他的widget布局方向确定) |
autoFillBackground | 是否自动填充背景颜色 |
windowFilePath | 将widget和一个本地文件路径关联 |
accessibleName | 设置widget的可访问名称(该名称可被辅助技术读取) 该属性用于实现无障碍程序的场景 |
accessibleDescription | 设置widget的详细描述(作同accessibleName) |
inputMethodHints | 针对输入框有效,用来提示用户当前能输入的合法数据的格式(如只能输入数字、只能输入日期等) |
下面介绍一些常用的属性,没有介绍到的可以自行查阅文档
二、enable属性
API | 说明 |
---|---|
isEnabled() | 获取控件的可用状态 |
setEnabled() | 设置控件是否可用,true表示可用,false表示禁用 |
说明:
- "禁用"是指该控件不能接收任何用户的输入事件,并且外观往往是灰色的
- 若一个widget被禁用,则该widget的子元素也被禁用
代码示例:设置一个按钮的初始状态为禁用,另一个按钮用于切换该按钮的状态
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void Handle();
void Change();
private:
Ui::Widget *ui;
QPushButton* btn1;
QPushButton* btn2;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
btn1 = new QPushButton("按钮", this);
btn1->move(200, 200);
btn1->setEnabled(false);
btn2 = new QPushButton("切换可用状态", this);
btn2->move(200, 400);
connect(btn1, &QPushButton::clicked, this, &Widget::Handle);
connect(btn2, &QPushButton::clicked, this, &Widget::Change);
}
Widget::~Widget()
{
delete ui;
}
void Widget::Handle()
{
qDebug() << "点击按钮成功";
}
void Widget::Change()
{
if(btn1->isEnabled()) btn1->setEnabled(false);
else btn1->setEnabled(true);
qDebug() << "切换状态成功";
}
三、geometry属性
位置和尺寸,其实是四个属性的统称:x横坐标、y纵坐标、width宽度、height高度
API | 说明 |
---|---|
geometry | 获取控件的位置和尺寸。返回结果是一个QRect,包含了x、y、width、height,其中x、y是左上角的坐标 |
setGeometry(QRect) setGeometry(int x, int y, int width, int height) |
设置控件的位置和尺寸,可以直接设置一个QRect,也可以各个属性单独设置 |
代码示例:通过四个按钮分别控制一个按钮上下左右移动
#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_pushButtonRight_clicked()
{
QRect rect = ui->pushButtonTarget->geometry();
rect.setX(rect.x() + 5);
ui->pushButtonTarget->setGeometry(rect);
}
void Widget::on_pushButtonUp_clicked()
{
QRect rect = ui->pushButtonTarget->geometry();
rect.setY(rect.y() - 5);
ui->pushButtonTarget->setGeometry(rect);
}
void Widget::on_pushButtonLeft_clicked()
{
QRect rect = ui->pushButtonTarget->geometry();
rect.setX(rect.x() - 5);
ui->pushButtonTarget->setGeometry(rect);
}
void Widget::on_pushButtonDown_clicked()
{
QRect rect = ui->pushButtonTarget->geometry();
rect.setY(rect.y() + 5);
ui->pushButtonTarget->setGeometry(rect);
}
运行程序可以发现,按下四个按钮,就会控制target的左上角的位置,对应的按钮整个尺寸也会
发生改变。上述代码中是直接设置的QRect中的x、y,实际上QRect内部存储了左上和右下两个点的坐标,再通过两个点的坐标差值计算长宽,单纯修改左上坐标就会引起整个矩形的长宽发生改变
class Q_CORE_EXPORT QRect
{
public:
Q