超全面!Qt的常用基础控件

1、何为控件?

        在Qtcreator中,访问UI设计界面,左侧的控件列表中就是我们Qt开发所使用到的常用控件,通过这些空间,我们可以设计出丰富美观的前端界面,对于单个控件而言,我们还可以添加槽函数,根据控件不同的信号,定义不同的槽函数,从而可以给控件添加不同的功能。

2、QWidget

在 Qt 中, 使⽤ QWidget 类表⽰ "控件". 像按钮, 视图, 输⼊框, 滚动条等具体的控件类, 都是继承⾃ QWidget. 可以说, QWidget 中就包含了 Qt 整个控件体系中, 通⽤的部分.

在 Qt Designer 中, 随便拖⼀个控件过来, 选中该控件, 即可在右下⽅看到 QWidget 中的属性

2.1QWidget核心属性一览

属性作用
enabled设置控件是否可使⽤. true 表⽰可⽤, false 表⽰禁⽤.
geometry位置和尺⼨. 包含 x, y, width, height 四个部分. 其中坐标是以⽗元素为参考进⾏设置的.
windowTitle设置 widget 标题
windowIcon设置 widget 图标
windowOpacity设置 widget 透明度
cursor⿏标悬停时显⽰的图标形状. 是普通箭头, 还是沙漏, 还是⼗字等形状. 在 Qt Designer 界⾯中可以清楚看到可选项.
font字体相关属性. 涉及到字体家族, 字体⼤⼩, 粗体, 斜体, 下划线等等样式.
toolTip⿏标悬停在 widget 上会在状态栏中显⽰的提⽰信息
toolTipDuringtoolTip 显⽰的持续时间
statusTipWidget状态发生变化的时候显示的提示信息
whatsThis⿏标悬停并按下 alt+F1 时, 显⽰的帮助信息(显⽰在⼀个弹出的窗⼝中).
styleSheet允许使⽤ CSS 来设置 widget 中的样式. Qt 中⽀持的样式⾮常丰富, 对于前端开发⼈员上⼿是⾮常友好的
focusPolicy

该 widget 如何获取到焦点.

• Qt::NoFocus:控件不参与焦点管理,即⽆法通过键盘或⿏标获取焦点

• Qt::TabFocus:控件可以通过Tab键获得焦点

• Qt::ClickFocus:控件可以通过⿏标点击获得焦点

• Qt::StrongFocus:控件可以通过键盘和⿏标获得焦点

• Qt::WheelFocus:控件可以通过⿏标滚轮获得焦点(在某些平台或样式中可能不可 ⽤)

contextMenuPolicy

上下⽂菜单的显⽰策略.

• Qt::DefaultContextMenu:默认的上下⽂菜单策略,⽤⼾可以通过⿏标右键或键盘 快捷键触发上下⽂菜单

• Qt::NoContextMenu:禁⽤上下⽂菜单,即使⽤⼾点击⿏标右键也不会显⽰菜单 •Qt::PreventContextMenu:防⽌控件显⽰上下⽂菜单,即使⽤⼾点击⿏标右键也不 会显⽰菜单

• Qt::ActionsContextMenu:将上下⽂菜单替换为控件的“动作”菜单,⽤⼾可以通 过⿏标右键或键盘快捷键触发这个菜单

• Qt::CustomContextMenu:使⽤⾃定义的上下⽂菜单,⽤⼾可以通过⿏标右键或键 盘快捷键触发这个菜单

ocale设置语⾔和国家地区.
acceptDrops

该部件是否接受拖放操作。

如果设置为true,那么该部件就可以接收来⾃其他部件的拖放操作。

当⼀个部件被拖放 到该部件上时,该部件会接收到相应的拖放事件(如dropEvent)。 如果设置为false,那么该部件将不会接收任何拖放操作。

minimumSize控件的最⼩尺⼨. 包含最⼩宽度和最⼩⾼度
maximumSize控件的最⼤尺⼨. 包含最⼤宽度和最⼤⾼度.
sizePolicy尺⼨策略. 设置控件在布局管理器中的缩放⽅式.
windowModality指定窗⼝是否具有 "模态" ⾏为
sizeIncrement拖动窗⼝⼤⼩时的增量单位.
baseSize窗⼝的基础⼤⼩, ⽤来搭配 sizeIncrement 调整组件尺⼨是计算组件应该调整到的合适 的值
palette调⾊板. 可以设置 widget 的颜⾊⻛格
mouseTracking是否要跟踪⿏标移动事件. 如果设为 true, 表⽰需要跟踪, 则⿏标划过的时候该 widget 就能持续收到⿏标移动事件. 如果设为 false, 表⽰不需要跟踪, 则⿏标划过的时候 widget 不会收到⿏标移动事件, 只 能收到⿏标按下或者释放的事件.
tabletTracking是否跟踪触摸屏的移动事件. 类似于 mouseTracking . Qt 5.9 中引⼊的新属性
layoutDirection

布局⽅向. • Qt::LeftToRight:⽂本从左到右排列,也是默认值。

• Qt::RightToLeft:⽂本从右到左排列。

• Qt::GlobalAtomics:部件的布局⽅向由全局原⼦性决定(PS 这个翻译其实有点尴 尬. 其实就是根据应⽤程序中的其他 widget 布局⽅向确定的).

autoFillBackground是否⾃动填充背景颜⾊.
windowFilePath能够把 widget 和⼀个本地⽂件路径关联起来. PS: 其实作⽤不⼤.
accessibleName设置 widget 的可访问名称. 这个名称可以被辅助技术 (像屏幕阅读器) 获取到. 比特就业课 这个属性⽤于实现⽆障碍程序的场景中 (也就是给盲⼈写的程序). PS: 其实盲⼈也是可以使⽤电脑和⼿机的. 甚⾄盲⼈还能成为程序猿. 参⻅ https://www.bilibili.com/video/BV1954y1d7z9
accessibleDescripti on设置 widget 的详细描述. 作⽤同 accessibleName
inputMethodHints针对输⼊框有效, ⽤来提⽰⽤⼾当前能输⼊的合法数据的格式. ⽐如只能输⼊数字, 只能 输⼊⽇期等.

2.2 enabled

API说明
isEnabled()获取控件的可用状态
setEnabled()设置控件的可用状态

案例:按钮被禁用

通过另一个按钮来设置该按钮的禁用状态

结果如图:
widget.cpp

在编写该代码的过程中,我们有一下几点需要注意

1)要控制的QPushButton按钮必须要添加到widget类的成员变量中,由此可以被槽函数访问到

2)槽函数一定要在头文件中声明

3)使用QPushbutton时要包含对应的头文件

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    ,button(nullptr)
{
    ui->setupUi(this);
    button=new QPushButton(this);
    button->setText("这是一个被禁用的按钮");
    button->setEnabled(false);
    QPushButton* button2=new QPushButton(this);
    button2->setText("切换按钮1 的状态");
    button2->move(100,50);
    //将按钮2的点击信号与槽函数绑定
    connect(button2,&QPushButton::clicked,this,&Widget::handle);
}

void Widget::handle()
{
    if(button->isEnabled())
    {
        button->setEnabled(false);
    }
    else{
        button->setEnabled(true);
    }
}
Widget::~Widget()
{
    delete ui;
}

2.3 geometry

位置和尺寸

如图,以桌面左上角为原点,Widget距离原点的横向长度长度为x,纵向长度为y,而Widget的高度为height,宽度为width

常用API

小小案例

对上个控件的槽函数代码稍加修改,就可以给按钮二同时添加上移动按钮一 功能

Window frame的影响

如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的 时候就有两种算法. 包含 window frame 和 不包含 window frame. 其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算 的.

其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计 算的. 当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的.

2.4windowTitle

Widget::Widget(QWidget *parent)
 : QWidget(parent)
 , ui(new Ui::Widget)
{
 ui->setupUi(this);
 // 设置窗⼝标题
 this->setWindowTitle("这是标题");
}

2.5 windowIcon

1) 先在 D 盘中放⼀个图⽚, 名字为 rose.jpg

2)widget.cpp

#include <QIcon>
Widget::Widget(QWidget *parent)
 : QWidget(parent)
 , ui(new Ui::Widget)
{
 ui->setupUi(this);
 // 创建图标对象
 QIcon icon("d:/rose.jpg");
 // 设置图标
 this->setWindowIcon(icon);
}

效果:

2.6 windowOpacity

该控件可以控制窗口透明度

两个按钮的槽函数

效果

2.7 cursor

可以改变某一个鼠标停留在某个鼠标的样式,样式不限于Qt库中的几种样式,可以自定义图片生成光标样式

创建自定义光标之前,我们需要现将图片引入,根据图片的路径构建一个Qpixmap对象,然后根据Qpixmap对象构建出cursor对象,在通过要改变放置图标的按钮的API设置图标即可。

案例

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //引入图片
    QPixmap pixmap(":/basketball.png");
    //创建光标对象
    QCursor cursor(pixmap,0,0);
    //根据光标对象设置光标
    this->setCursor(cursor);
    QPushButton* button1=new QPushButton(this);
    button1->setText("Low");
    button1->move(200,200);
    connect(button1,&QPushButton::clicked,this,&Widget::handle);
}
void Widget::handle()
{
    float opacity = this->windowOpacity();
    qDebug()<<opacity;
    opacity-=0.1;
    this->setWindowOpacity(opacity);
}
Widget::~Widget()
{
    delete ui;
}

2.8 font

设置对应控件的字体

API

属性

实用案例

2.9 toolTip

光标防止在该部分就会生成对应的提示文本

核心设置代码

2.10 focusPolicy

获取焦点的策略,鼠标所选中的地方就是焦点

使用案例:线上笔试的时候,焦点应该停留在答题网站上,焦点一旦离开答题网站,就会识别出可能作弊的可能

        

对焦点的操作

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值