【Qt】QWidget的常见属性

目录

一、Qwidget核心属性

二、enable属性

三、geometry属性

四、WindowFrame的影响

五、windowTitle属性

六、windowIcon属性

七、qrc文件管理资源

八、windowOpacity属性

九、cursor属性

十、font属性

十一、toolTip属性

十二、focusPolicy属性

十三、styleSheet属性


一、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如何获取到焦点

  • Qt::NoFocus:控件不参与焦点管理,即无法通过键盘或鼠标获取焦点
  • Qt::TabFocus:控件可以通过Tab键获得焦点
  • Qt::ClickFocus:控件可以通过鼠标点击获得焦点
  • Qt::StrongFocus:控件可以通过键盘和鼠标获得焦点
  • Qt::WheelFocus:控件可以通过鼠标滚轮获得焦点(在某些平台或样式中可能不可用)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值