QT常用的控件

QT常用控件

一.控件概述

Widget 是 Qt 中的核心概念. 英文原义是 “小部件”, 我们此处也把它翻译为 “控件” .
控件是构成⼀个图形化界面的基本要素.

在这里插入图片描述
像上述示例中的, 按钮, 列表视图, 树形视图, 单行输入框, 多行输入框, 滚动条, 下拉框等, 都可以称为 “控件”.

Qt 作为⼀个成熟的 GUI 开发框架, 内置了大量的常用控件. 这⼀点在 Qt Designer 中就可以看到端倪.
并且 Qt 也提供了 “自定义控件” 的能力, 可以让程序猿在现有控件不能满足需求的时候, 对现有控件做出扩展, 或者手搓出新的控件

在这里插入图片描述

二.QWidget 核心属性

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

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

在这里插入图片描述
这些属性既可以通过 QtDesigner 会直接修改, 也可以通过代码的方式修改.
这些属性的具体含义, 在 Qt Assistant 中均有详细介绍.

2.1 核心属性概览

下列表格列出了 QWidget 中的属性及其作用.

属性 作用
enabled 设置控件是否可使用. true 表示了用, false 表示禁用.
geometry 位置和尺寸,包含x,y,width,height四个部分,其中坐标是以父元素为参考设置的
windowTitle 设置 widget 标题
windowIcon 设置 widget 图标
windowOpacity 设置 widget 透明度
cursor 鼠标悬停时显示的图标形状.是普通箭头, 还是沙漏, 还是十字等形状.在 Qt Designer 界面中可以清楚看到可选项.
font 字体相关属性.涉及到字体家族, 字体大小, 粗体, 斜体, 下划线等等样式
toolTip ⿏标悬停在 widget 上会在状态栏中显示的提示信息.
toolTipDuring toolTip 显示的持续时间.
statusTip Widget 状态发生改变时显示的提示信息(比如按钮被按下等).
styleSheet 允许使用 CSS 来设置 widget 中的样式
focusPolicy 该 widget 如何获取到焦点.Qt::NoFocus:控件不参与焦点管理,即无法通过键盘或鼠标获取焦点 Qt::TabFocus:控件可以通过Tab键获得焦点 Qt::ClickFocus:控件可以通过鼠标点击获得焦点 Qt::StrongFocus:控件可以通过键盘和鼠标获得焦 Qt::WheelFocus:控件可以通过鼠标滚轮获得焦点(在某些平台或样式中可能不可用)
minimumSize 控件的最小尺寸. 包含最小宽度和最小高度
maximumSize 控件的最大吃尺寸. 包含最大宽度和最大高度.
sizePolicy 尺寸策略. 设置控件在布局管理器中的缩放方式.
windowModality 指定窗口是否具有 “模态” 行为.
sizeIncrement 拖动窗口大小时的增量单位.
baseSize 窗⼝的基础大小, 用来搭配 sizeIncrement 调整组件尺寸是计算组件应该调整到的合适的值
palette 调色板. 可以设置 widget 的颜色风格
mouseTracking 是否要跟踪鼠标移动事件. 如果设为 true, 表示需要跟踪, 则鼠标划过的时候该 widget 就能持续收到鼠标移动事件.如果设为 false, 表示不需要跟踪, 则鼠标划过的时候 widget 不会收到鼠标移动事件, 只能收到鼠标按下或者释放的事件.
tabletTracking 是否跟踪触摸屏的移动事件.类似于 mouseTracking . Qt 5.9 中引⼊的新属性.
layoutDirection 布局方向:Qt::LeftToRight:文本从左到右排列,也是默认值。Qt::RightToLeft:文本从右到左排列。
autoFillBackground 是否⾃动填充背景颜色.
windowFilePath 能够把 widget 和⼀个本地文件路径关联起来. PS: 其实作用不大.
accessibleName 设置 widget 的可访问名称. 这个名称可以被辅助技术 (像屏幕阅读器) 获取到
inputMethodHints 针对输⼊框有效, 用来提示用户当前能输入的合法数据的格式. 比如只能输入数字, 只能输入日期等.

2.2 enabled

API 说明
isEnabled() 获取到控件的可用状态.
setEnabled 设置控件是否可使用. true 表示可用, false 表示禁用.
  • 所谓 “禁用” 指的是该控件不能接收任何用户的输入事件, 并且外观上往往是灰色的
  • 如果⼀个 widget 被禁用, 则该 widget 的子元素也被禁用.

代码示例:使用代码创建一个禁用状态的按钮

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
   
    ui->setupUi(this);

    ui->pushButton->setEnabled(false);

}

Widget::~Widget()
{
   
   
    delete ui;
}


运行程序, 可以看到按钮处于灰色状态, 无法被点击.
在这里插入图片描述

代码示例: 通过按钮2 切换按钮1 的禁用状态.

生成两个按钮的 slot 函数.

  • List item使用 isEnabled 获取当前按钮的可用状态.
  • 使用 setEnabled 修改按钮的可用状态. 此处是直接针对原来的可用状态进行取反后设置.
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
   
    ui->setupUi(this);
}

Widget::~Widget()
{
   
   
    delete ui;
}


void Widget::on_pushButton_clicked()
{
   
   
    qDebug()<<"按下按钮";
}

void Widget::on_pushButton_2_clicked()
{
   
   
    bool fal = this->ui->pushButton->isEnabled();
    this->ui->pushButton->setEnabled(!fal);
}

2.3 geometry

位置和尺寸. 其实是四个属性的统称:

  • x横坐标
  • y宗坐标
  • width宽度
  • height 高度
    在这里插入图片描述

对于 Qt 的坐标系, 不要忘记是⼀个 “左手坐标系”. 其中坐标系的原点是当前元素的父元素的左上角

在这里插入图片描述

API 说明
geometry() 获取到控件的位置和尺寸. 返回结果是⼀个 QRect, 包含了 x, y, width, height. 其中 x, y 是左上角的坐标.
setGeometry(QRect) setGeometry(int x, int y,int width, int height) 设置控件的位置和尺寸. 可以直接设置⼀个 QRect, 也可以分四个属性单独设置

代码示例: 控制按钮的位置

在这里插入图片描述

在 widget.cpp 中编写四个按钮的 slot 函数

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QRect>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
   
   
    ui->setupUi(this);

}

Widget::~Widget()
{
   
   
    delete ui;
}


void Widget::on_pushButton_up_clicked()
{
   
   
    QRect ret =ui->pushButton->geometry();
    ui->pushButton->setGeometry(ret.x(),ret.y()-5,ret.width(),ret.height());

}

void Widget::on_pushButton_left_clicked()
{
   
   
    QRect ret = ui->pushButton->geometry();
    ui->pushButton->setGeometry(ret.x()-5,ret.y(),ret.width(),ret.height(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值