当前位置: 首页 > news >正文

<3>, 常用控件

目录

一、控件概述

二、QWidget 核心属性

1, 核心属性列表

2,enabled

3,geometry

4,windowTitle

5,windowIcon

6,windowOpacity

7,font

8,toolTip

9,focusPolicy

10,styleSheet

三、按钮类控件

1,QPushButton

2,Radio Buttion

3,Check Box

四、显示类控件

1,Label

2,LCD Number

3,ProgressBar

4,Calendar Widget

五、输入类控件

1,Line Edit

2,Text Edit

3,Combo Box

4,SpinBox

5,Date Edit & Time Edit

6,Dial

7,Slider

六、多元素控件

1,QListWidget

2,QTableWidget

3,QTreeWidget

七、容器类控件

1,Group Box

2,Tab Widget

八、布局管理器

1,垂直布局

2,水平布局

3,网格布局

4,表单布局

5,Spacer


一、控件概述

Widget是Qt中的核心概念,意思是“控件”,控件是构成图形化界面的基本要素。

像下图中的, 按钮, 列表视图, 树形视图, 单行输入框, 多行输入框, 滚动条, 下拉框,等待,都可以称为“控件”。

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

控件是GUI开发中的通用概念,不仅局限在于Qt中。

控件体系的发展阶段:

第一阶段:

完全没有控件,此时需要通过一些绘图API手动的绘制出按钮或者输入框等内容,代码编写繁琐,例如文曲星LAVA平台开发。

第二阶段:

只包含粗略的控件,只提供了按钮、输入框、单选框、复选框等最常用的控件,例如html的原生控件。

第三阶段:

更完整的控件体系,基本可以覆盖到GUI开发中的大部分场景,例如早期的MFC、VB、C++Builder、Qt、Delph,到后来的Android SDK,Java FX、前端各种UI库等等。

二、QWidget 核心属性

1, 核心属性列表

属性

作用

enabled

设置控件是否可使用.

true 表示可用 false 表示禁用.

geometry

位置和尺寸. 包含 x, y, width, height 四个部分.

其中坐标是以父元素为参考进行设置的.

windowTitle

设置 widget 标题

windowIcon

设置 widget 图标

windowOpacity

设置 widget 透明度

cursor

鼠标悬停时显示的图标形状.

是普通箭头, 还是沙漏, 还是十字等形状.

在 Qt Designer 界面中可以清楚看到可选项.

font

字体相关属性.

涉及到字体家族, 字体大小, 粗体, 斜体, 下划线等等样式

toolTip

鼠标悬停在 widget 上会在状态栏中显示的提示信息.

toolTipDuring

toolTip 显示的持续时间.

statusTip

Widget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等).

whatsThis

鼠标悬停并按下 alt+F1 时, 显示的帮助信息(显示在一个弹出的窗口中).

styleSheet

允许使用 CSS 来设置 widget 中的样式.

Qt 中支持的样式非常丰富, 对于前端开发人员上手是非常友好的.

focusPolicy

该 widget 如何获取到焦点.

contextMenuPolicy

上下文菜单的显示策略.

Qt::DefaultContextMenu:默认的上下文菜单策略 ,用户可以通过鼠标右键或键盘快捷键触发上下文菜单。

Qt::NoContextMenu:禁用上下文菜单 ,即使用户点击鼠标右键也不会显示菜单。

Qt::PreventContextMenu:防止控件显示上下文菜单 ,即使用户点击鼠标右键也不会显示菜单。

Qt::ActionsContextMenu:将上下文菜单替换为控件的“动作”菜单 ,用户可以通 过鼠标右键或键盘快捷键触发这个菜单。

Qt::CustomContextMenu:使用自定义的上下文菜单 ,用户可以通过鼠标右键或键 盘快捷键触发这个菜单。

locale

设置语言和国家地区.

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 的可访问名称. 这个名称可以被辅助技术 (像屏幕阅读器) 获取到.

这个属性用于实现无障碍程序的场景中 (也就是给盲人写的程序).

accessibleDescripti

on

设置 widget 的详细描述. 作用同 accessibleName

inputMethodHints

针对输入框有效, 用来提示用戶当前能输入的合法数据的格式. 比如只能输入数字, 只能 输入日期等.

2,enabled

API

说明

windowIcon()

获取到控件的窗口图标. 返回 QIcon 对象.

setWindowIcon(const QIcon& icon)

设置控件的窗口图标.

示例

#include <QPushButton>test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);QPushButton* btn = new QPushButton(this);btn->setText("这是个被禁用的按钮 ");btn->setEnabled(false);
}

3,geometry

API

说明

geometry()

获取到控件的位置和尺寸.

返回结果是一个 QRect, 包含了 x, y, width, height.

其中 x, y 是左上角的坐标.

setGeometry(QRect)

setGeometry(int x, int y, int width, intheight)

设置控件的位置和尺寸.

可以直接设置一个 QRect,

也可以分四个属性单独设置.

示例

void test::on_up_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x(),rect.y()-5,rect.width(),rect.height());qDebug() << rect;
}void test::on_down_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x(),rect.y()+5,rect.width(),rect.height());qDebug() << rect;
}void test::on_left_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x()-5,rect.y(),rect.width(),rect.height());qDebug() << rect;
}void test::on_right_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x()+5,rect.y(),rect.width(),rect.height());qDebug() << rect;
}

4,windowTitle

API

说明

windowTitle()

获取到控件的窗口标题.

setWindowTitle(const

QString& title)

设置控件的窗口标题.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);this->setWindowTitle("666");
}

5,windowIcon

API

说明

windowIcon()

获取到控件的窗口图标. 返回 QIcon 对象

setWindowIcon(const QIcon& icon)

设置控件的窗口图标.

示例

#include <QIcon>test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);QIcon icon(":/rose.png");this->setWindowIcon(icon);
}

6,windowOpacity

API

说明

windowOpacity()

获取到控件的不透明数值.

返回 float, 取值为 0.0-> 1.0

其中 0.0 表示全透明, 1.0 表示 完全不透明.

setWindowOpacity(float n)

设置控件的不透明数值.

示例

void test::on_add_clicked()
{this->setWindowOpacity(this->windowOpacity() - 0.1);
}
void test::on_sub_clicked()
{this->setWindowOpacity(this->windowOpacity() + 0.1);
}

7,font

API

说明

setToolTip

设置 toolTip.

鼠标悬停在该 widget 上时会有提示说明.

setToolTipDuring

设置 toolTip 提示的时间. 单位 ms.

时间到后 toolTip 自动消失.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 设置 label 的⽂本内容ui->label->setText("这是一段文本");// 创建字体对象QFont font;// 设置字体家族font.setFamily("仿宋");// 设置字体大小font.setPointSize(20);// 设置字体加粗font.setBold(true);// 设置字体倾斜font.setItalic(true);// 设置字体下划线font.setUnderline(true);// 设置字体删除线font.setStrikeOut(true);// 设置字体对象到 label 上ui->label->setFont(font);
}

8,toolTip

API

说明

setToolTip

设置 toolTip.

鼠标悬停在该 widget 上时会有提示说明.

setToolTipDuring

设置 toolTip 提示的时间. 单位 ms.

时间到后 toolTip 自动消失.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);    ui->add->setToolTip("这是+按钮");ui->add->setToolTipDuration(1000);ui->sub->setToolTip("这是-按钮");ui->add->setToolTipDuration(3000);
}

9,focusPolicy

API

说明

focusPolicy()

获取该 widget 的 focusPolicy,

返回 Qt::FocusPolicy

setFocusPolicy(Qt::FocusPolicy policy)

设置 widget 的 focusPolicy.

类型说明

Qt::FocusPolicy 是⼀个枚举类型. 取值如下

Qt::NoFocus :控件不会接收键盘焦点

Qt::TabFocus :控件可以通过Tab键接收焦点

Qt::ClickFocus :控件在⿏标点击时接收焦点

Qt::StrongFocus :控件可以通过Tab键和⿏标点击接收焦点 (默认值)

Qt::WheelFocus : 类似于 Qt::StrongFocus , 同时控件也通过⿏标滚轮获取到焦点 (新增的选项, ⼀般很少使⽤).

10,styleSheet

CSS (Cascading StyleSheets 层叠样式表) 本身属于网页前端技术. 主要就是用来描述界面的 样式.

所谓 "样式", 包括不限于 大小, 位置, 颜色, 间距, 字体, 背景, 边框等.

我们平时看到的丰富多彩的网页, 就都会用到大量的 CSS.

Qt 虽然是做 GUI 开发, 但实际上和 网页前端 有很多异曲同工之处. 因此 Qt 也引入了对于 CSS 的支持.

CSS 中可以设置的样式属性非常多. 基于这些属性 Qt 只能支持其中一部分, 称为 QSS (Qt StyleSheet) . 具体的支持情况可以参考 Qt 文档中 "Qt StyleSheets Reference" 章节.

示例

void test::on_sun_clicked()
{this->setStyleSheet("background-color: #FFF");
}
void test::on_night_clicked()
{this->setStyleSheet("background-color: #333");
}

三、按钮类控件

1,QPushButton

属性

说明

text

按钮中的文本

icon

按钮中的图标

iconSize

按钮中图标的尺寸

shortCut

按钮对应的快捷键

autoRepeat

按钮是否会重复触发. 当鼠标左键按住不放时,

如果设为 true, 则会持续产生鼠标点击事件;

如果设为 false, 则必须释放鼠标,

再次按下鼠标时才能产生点击事件.

(相当于游戏手柄上的 "连发" 效果)

autoRepeatDelay

重复触发的延时时间. 按住按钮多久之后, 开始重复触发.

autoRepeatInterval

重复触发的周期.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);    // 设置这些按钮的图标ui->pushButton->setIcon(QIcon(":/doge.png"));ui->pushButton->setIconSize(QSize(100,100));ui->up->setShortcut(QKeySequence(Qt::Key_W));ui->down->setShortcut(QKeySequence(Qt::Key_S));ui->left->setShortcut(QKeySequence(Qt::Key_A));ui->right->setShortcut(QKeySequence(Qt::Key_D));ui->up->setAutoRepeat(true);ui->down->setAutoRepeat(true);ui->left->setAutoRepeat(true);ui->right->setAutoRepeat(true);
}test::~test()
{delete ui;
}void test::on_up_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x(),rect.y()-10,rect.width(),rect.height());
}void test::on_down_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x(),rect.y()+10,rect.width(),rect.height());
}void test::on_left_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x()-10,rect.y(),rect.width(),rect.height());
}void test::on_right_clicked()
{QRect rect = ui->pushButton->geometry();ui->pushButton->setGeometry(rect.x()+10,rect.y(),rect.width(),rect.height());
}

2,Radio Buttion

Radio Buttion是单选按钮. 可以让我们在多个选项中选择一个

属性

说明

checkable

是否能选中

checked

是否已经被选中. checkable 是 checked 的前提条件.

autoExclusive

是否排他.

选中一个按钮之后是否会取消其他按钮的选中.

对于 QRadioButton 来说默认就是排他的.

示例1

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);    // 设置默认选中该按钮ui->man->setChecked(true);ui->label->setText("默认的性别为: 男");// 禁 other 选项,虽然不会被选中, 但是可以触发点击事件ui->other->setCheckable(false);// 禁 other 选项,此时该按钮无法被选中, 不响应任何输入ui->other->setEnabled(false);
}test::~test()
{delete ui;
}void test::on_man_clicked()
{ui->label->setText("你选择的性别为:男");
}void test::on_woman_clicked()
{ui->label->setText("你选择的性别为:女");
}void test::on_other_clicked()
{ui->label->setText("你选择的性别为:其他");
}

示例2

#include <QButtonGroup>test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);    // 给radioButton分组QButtonGroup* group1 = new QButtonGroup(this);QButtonGroup* group2 = new QButtonGroup(this);group1->addButton(ui->radioButton);group1->addButton(ui->radioButton_2);group1->addButton(ui->radioButton_3);group2->addButton(ui->radioButton_4);group2->addButton(ui->radioButton_5);group2->addButton(ui->radioButton_6);
}

示例3

void test::on_radioButton_clicked(bool checked)
{// checked 表示当前radioButton是否选中状态,true为选中,false为不选中qDebug() << "clicked: " << checked;
}void test::on_radioButton_2_pressed()
{qDebug() << "pressed";
}void test::on_radioButton_3_released()
{qDebug() << "released";
}void test::on_radioButton_4_toggled(bool checked)
{// checked的状态改变就会触发这个信号qDebug() << "toggled: " << checked;}

3,Check Box

Check Box表示复选按钮. 可以允许选中多个.

示例

void test::on_pushButton_clicked()
{QString result = "今天你的安排是:";if(ui->eat->isChecked()){result += ui->eat->text();}if(ui->sleep->isChecked()){result += ui->sleep->text();}if(ui->play->isChecked()){result += ui->play->text();}ui->label->setText(result);
}

四、显示类控件

1,Label

属性

说明

text

QLabel 中的文本

textFormat

文本的格式.

Qt::PlainText 纯文本

Qt::RichText 富文本(支持 html 标签)

Qt::MarkdownText markdown 格式

Qt::AutoText 根据文本内容自动决定文本格式.

pixmap

QLabel 内部包含的图片

scaledContents

设为 true 表示内容自动拉伸填充QLabel

设为 false 则不会自动拉伸

alignment

对齐方式.

可以设置水平和垂直方向如何对齐.

wordWrap

设为 true 内部的文本会自动换行.

设为 false 则内部文本不会自动换行.

indent

设置文本缩进. 水平和垂直方向都生效.

margin

内部文本和边框之间的边距.

不同于于 indent, 但是是上下左右四个方向都同时有效.

而 indent 最多只是两个方向有效(具体哪两个方向有效取决于 alignment )

openExternalLinks

是否允许打开一个外部的链接.

(当 QLabel 文本内容包含 url 的时候涉及到)

buddy

QLabel中的文本,可以设置为 "快捷键 &A" 这样的形式,

其中 & 后⾯跟着的字符, 就是快捷键,

可以通过 alt + A 的⽅式来触发该快捷键

给 QLabel 关联一个 "伙伴" , 这样点击 QLabel 时就能激活对应的伙伴.

例如伙伴如果是一个 QCheckBox, 那么该 QCheckBox 就会被选中.

示例1

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 先把QLabel设置到窗口一样大// 并且把QLabel左上角设置到窗口的左上角QRect rect = this->geometry();ui->label->setGeometry(0,0,rect.width(),rect.height());// 设置图片ui->label->setPixmap(QPixmap(":/huaji.png"));// 让图片铺满整个QLabel窗口ui->label->setScaledContents(true);
}void test::resizeEvent(QResizeEvent *event)
{// 随着鼠标拖动窗口,改变图片大小qDebug()<<event->size();ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}

示例2

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 设置对齐方式ui->label->setText("这是一段文本");ui->label->setAlignment(Qt::AlignRight | Qt::AlignTop);// 设置自动换行ui->label_2->setText("这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 ");ui->label_2->setWordWrap(true);// 设置缩进ui->label_3->setText("这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 这是一段很长的文本 ");ui->label_3->setWordWrap(true);ui->label_3->setIndent(50);// 设置边距ui->label_4->setText("这是一段文本");ui->label_4->setMargin(30);
}

示例3

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 设置 label 的伙伴 widgetui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);
}

2,LCD Number

属性

说明

intValue

QLCDNumber:显示的数字值(int).

value

QLCDNumber:显示的数字值(double).

和 intValue 是联动的.

例如给 value 设为 1.5, intValue 的值就是 2.

另外, 设置 value 和 intValue 的方法名字为 者 setIntValue .

digitCount

显示几位数字.

mode

数字显示形式.

1. QLCDNumber::Dec :十进制模式 ,显示常规的十进制数字。

2. QLCDNumber::Hex :十六进制模式 ,以十六进制格式显示数字。

3. QLCDNumber::Bin :二进制模式 ,以二进制格式显示数字。

4. QLCDNumber::Oct :八进制模式 ,以八进制格式显示数字。

只有十进制的时候才能显示小数点后的内容.

segmentStyle

设置显示风格.

1. QLCDNumber::Flat :平面的显示风格 ,数字呈现在一个平坦的表面上。

2. QLCDNumber::Outline :轮廓显示风格 ,数字具有清晰的轮廓和阴影效果。

3. QLCDNumber::Filled :填充显示风格 ,数字被填充颜色并与背景区分开。

smallDecimalPoint

设置比较小的小数点.

示例1

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);//设置初始值ui->lcdNumber->display("10");// 创建一个QTimer实例timer = new QTimer(this);// 把QTimer的timeout信号和咱们自己的槽函数进行链接connect(timer,&QTimer::timeout,this,&test::handle);// 启动定时器,参数是触发timerout的周期,单位是毫秒timer->start(1000);
}test::~test()
{delete ui;
}void test::handle()
{// 先拿到LCDNumber中的数字int value = ui->lcdNumber->intValue();if(value <= 0){// 数字减到0了,停止定时器timer->stop();return;}ui->lcdNumber->display(value - 1);
}

3,ProgressBar

属性

说明

minimum

进度条最⼩值

maximum

进度条最大值

value

进度条当前值

alignment

⽂本在进度条中的对齐⽅式.

. Qt::AlignLeft : 左对齐

. Qt::AlignRight : 右对齐

. Qt::AlignCenter : 居中对齐

. Qt::AlignJustify : 两端对齐

textVisible

进度条的数字是否可见.

orientation

进度条的方向是水平还是垂直

invertAppearance

是否是朝反方向增长进度

textDirection

文本的朝向.

format

展示的数字格式.

. %p :表示进度的百分比(0-100)

. %v :表示进度的数值(0-100)

. %m :表示剩余时间( 以毫秒为单位)

. %t :表示总时间( 以毫秒为单位)

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 创建一个QTimer实例timer = new QTimer(this);// 把QTimer的timeout信号和咱们自己的槽函数进行链接connect(timer,&QTimer::timeout,this,&test::handle);// 启动定时器,参数是触发timerout的周期,单位是毫秒timer->start(100);
}test::~test()
{delete ui;
}void test::handle()
{// 先拿到LCDNumber中的数字int value = ui->progressBar->value();if(value >= 100){// 进度条满了,停止定时器timer->stop();return;}ui->progressBar->setValue(value + 1);
}

4,Calendar Widget

属性

说明

selectDate

当前选中的日期

minimumDate

最小日期

maximumDate

最大日期

firstDayOfWeek

每周的第—天(也就是日历的第—列) 是周几.

gridVisible

是否显示表格的边框

selectionMode

是否允许选择日期

navigationBarVisible

日历上方标题是否显示

horizontalHeaderFormat

日历上方标题显示的日期格式

verticalHeaderFormat

日历第—列显示的内容格式

dateEditEnabled

是否允许日期被编辑

void test::on_calendarWidget_selectionChanged()
{QDate date = ui->calendarWidget->selectedDate();qDebug()<<date;ui->label->setText(date.toString());
}

五、输入类控件

1,Line Edit

属性

说明

text

输入框中的文本

inputMask

输入内容格式约束

maxLength

最大长度

frame

是否添加边框

echoMode

显示方式.

QLineEdit::Normal :这是默认值 ,文本框会显示输入的文本。

QLineEdit::Password :在这种模式下 ,输入的字符会被隐藏, 通常用星号(*) 或等号(=)代替。

QLineEdit::NoEcho :在这种模式下 ,文本框不会显示任何输入 的字符。

cursorPosition

光标所在位置

alignment

文字对齐方式, 设置水平和垂直方向的对齐.

dragEnabled

是否允许拖拽

readOnly

是否是只读的(不允许修改)

placeHolderText

当输入框内容为空的时候, 显示什么样的提示信息

clearButtonEnabled

是否会自动显示出 "清除按钮" .

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);ui->lineEdit_name->setPlaceholderText("输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);ui->lineEdit_password->setEchoMode(QLineEdit::Password);ui->lineEdit_password->setPlaceholderText("输入密码");ui->lineEdit_password->setClearButtonEnabled(true);ui->lineEdit_password->setEchoMode(QLineEdit::Password);ui->lineEdit_phone->setPlaceholderText("输入号码");ui->lineEdit_phone->setClearButtonEnabled(true);ui->lineEdit_phone->setInputMask("000-0000-0000");
}test::~test()
{delete ui;
}void test::on_pushButton_submit_clicked()
{QString gender = ui->radioButton->isChecked() ? "男" : "女";qDebug()<<"姓名"<<ui->lineEdit_name->text()<<"密码"<<ui->lineEdit_password->text()<<"性别"<<gender<<"电话"<<ui->lineEdit_phone->text();
}

2,Text Edit

属性

说明

markdown

输入框内持有的内容. 支持 markdown 格式.

能够自动的对markdown 文本进行 渲染成 html.

html

输入框内持有的内容. 可以支持大部分 html 标签. 包括 img 和 table 等.

placeHolderText

输入框为空时提示的内容.

readOnly

是否是只读的

undoRedoEnable

是否开启 undo / redo 功能.

按下 ctrl + z 触发 undo

按下 ctrl + y 触发 redo

autoFormating

开启自动格式化.

tabstopWidth

按下缩进占多少空间

overwriteMode

是否开启覆盖写模式

acceptRichText

是否接收富文本内容

verticalScrollBarPolicy

垂直方向滚动条的出现策略

Qt::ScrollBarAsNeeded : 根据内容自动决定是否需要滚动条。这是默认值。

Qt::ScrollBarAlwaysOff : 总是关闭滚动条。

Qt::ScrollBarAlwaysOn : 总是显示滚动条。

horizontalScrollBarPolicy

水平方向滚动条的出现策略

Qt::ScrollBarAsNeeded : 根据内容自动决定是否需要滚动条。这是默认值。

Qt::ScrollBarAlwaysOff : 总是关闭滚动条。

Qt::ScrollBarAlwaysOn : 总是显示滚动条。

信号

说明

textChanged()

文本内容改变时触发

selectionChanged()

选中范围改变时触发

cursorPositionChanged()

光标移动时触发

undoAvailable(bool)

可以进行 undo 操作时触发

redoAvailable(bool)

可以进行 redo 操作时触发

copyAvaiable(bool)

文本被选中/取消选中时触发

示例

void test::on_textEdit_textChanged()
{// 获取到多行输入框直接的内容const QString& text = ui->textEdit->toPlainText();ui->label->setText(text);qDebug() << "[textChanged] " << ui->textEdit->toPlainText();
}
void test::on_textEdit_selectionChanged()
{const QTextCursor& cursor = ui->textEdit->textCursor();qDebug() << "[selectionChanged] " << cursor.selectedText();
}
void test::on_textEdit_cursorPositionChanged()
{const QTextCursor& cursor = ui->textEdit->textCursor();qDebug() << "[cursorPositionChanged] " << cursor.position();
}
void test::on_textEdit_undoAvailable(bool b)
{qDebug() << "[undoAvailable] " << b;
}
void test::on_textEdit_redoAvailable(bool b)
{qDebug() << "[redoAvailable] " << b;
}
void test::on_textEdit_copyAvailable(bool b)
{qDebug() << "[copyAvailable] " << b;
}

3,Combo Box

属性

说明

currentText

当前选中的文本

currentIndex

当前选中的条目下标.

从 0 开始计算. 如果当前没有条目被选中, 值为 -1

editable

是否允许修改

设为 true 时, QComboBox 的行为就非常接近 QLineEdit ,

也可以设置 validator

iconSize

下拉框图标 (小三角) 的大小

maxCount

最多允许有多少个条目

核心方法

方法

说明

addItem(const QString&)

添加一个条目

currentIndex()

获取当前条目的下标

从 0 开始计算. 如果当前没有条目被选中, 值为 -1

currentText()

获取当前条目的文本内容.

核心信号

信号

说明

activated(int)

activated(const QString & text)

当用户选择了一个选项时发出.

这个时候相当于用户点开下拉框, 并且鼠标划过某个选项.

此时还没有确认做出选择.

currentIndexChanged(int)

currentIndexChanged(const QString & text)

当前选项改变时发出.

此时用户已经明确的选择了一个选项.

用户操作或者通过程序操作都会触发这个信号.

editTextChanged(const QString & text)

当编辑框中的文本改变时发出

(editable 为 true 时有效)

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);ui->comboBox->addItem("麦辣鸡腿堡");ui->comboBox->addItem("巨无霸");ui->comboBox->addItem("培根双层牛堡");ui->comboBox_2->addItem("中薯条");ui->comboBox_2->addItem("麦乐鸡块");ui->comboBox_2->addItem("麦辣鸡翅");ui->comboBox_3->addItem("可乐");ui->comboBox_3->addItem("雪碧");
}test::~test()
{delete ui;
}void test::on_pushButton_clicked()
{qDebug() << ui->comboBox->currentText() << "," << ui->comboBox_2->currentText() << "," << ui->comboBox_3->currentText();
}

4,SpinBox

属性

说明

value

存储的数值.

singleStep

每次调整的 "步长". 按下一次按钮数据变化多少.

displayInteger

数字的进制. 例如 displayInteger 设为 10, 则是按照 10 进制表示. 设为 2 则为 2 进制表示.

minimum

最小值

maximum

最大值

suffix

后缀

prefix

前缀

wrapping

是否允许换行

frame

是否带边框

alignment

文字对齐方式.

readOnly

是否允许修改

buttonSymbol

按钮上的图标.

UpDownArrows 上下箭头形式

PlusMinus 加减号形式

NoButtons 没有按钮

accelerated (加速的)

按下按钮时是否为快速调整模式

correctionMode

输入有误时如何修正.

QAbstractSpinBox::CorrectToPreviousValue : 如果用户输入了一个 无效的值(例如 ,在只能显示正整数的SpinBox中输入了负数), 那么

SpinBox会恢复为上一个有效值。例如 ,如果SpinBox的初始值是1 ,用户 输入了-1(无效), 然后SpinBox会恢复为1。

QAbstractSpinBox::CorrectToNearestValue : 如果用户输入了一个 无效的值 ,SpinBox会恢复为最接近的有效值。例如 ,如果SpinBox的初始 值是1 ,用户输入了-1(无效), 那么SpinBox会恢复为0。

keyboardTrack

是否开启键盘跟踪.

设为 true, 每次在输入框输入一个数字, 都会触发一次 valueChanged() 和 textChanged() 信号.

设为 false, 只有在最终按下 enter 或者输入框失去焦点, 才会触发 valueChanged() 和 textChanged() 信号.

accelerated (加速的)

按下按钮时是否为快速调整模式

correctionMode

输入有误时如何修正.

. QAbstractSpinBox::CorrectToPreviousValue : 如果用户输入了一个 无效的值(例如 ,在只能显示正整数的SpinBox中输入了负数), 那么

SpinBox会恢复为上一个有效值。例如 ,如果SpinBox的初始值是1 ,用户 输入了-1(无效), 然后SpinBox会恢复为1。

. QAbstractSpinBox::CorrectToNearestValue : 如果用户输入了一个 无效的值 ,SpinBox会恢复为最接近的有效值。例如 ,如果SpinBox的初始 值是1 ,用户输入了-1(无效), 那么SpinBox会恢复为0。

keyboardTrack

是否开启键盘跟踪.

设为 true, 每次在输入框输入一个数字, 都会触发一次 valueChanged() 和 textChanged() 信号.

设为 false, 只有在最终按下 enter 或者输入框失去焦点, 才会触发 valueChanged() 和 textChanged() 信号.

核心信号

信号

说明

textChanged(QString)

微调框的文本发生改变时会触发.

参数 QString 带有 前缀 和 后缀.

valueChanged(int)

微调框的文本发生改变时会触发.

参数 int, 表示当前的数值.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);ui->comboBox->addItem("麦辣鸡腿堡");ui->comboBox->addItem("巨无霸");ui->comboBox->addItem("培根双层牛堡");ui->comboBox_2->addItem("中薯条");ui->comboBox_2->addItem("麦乐鸡块");ui->comboBox_2->addItem("麦辣鸡翅");ui->comboBox_3->addItem("可乐");ui->comboBox_3->addItem("雪碧");// 针对 QStringBox 的范围进行设置ui->spinBox->setRange(1,5);ui->spinBox_2->setRange(1,5);ui->spinBox_3->setRange(1,5);ui->spinBox->setValue(1);ui->spinBox_2->setValue(1);ui->spinBox_3->setValue(1);
}test::~test()
{delete ui;
}void test::on_pushButton_clicked()
{qDebug() << ui->comboBox->currentText()<< ui->spinBox->value()<< ui->comboBox_2->currentText()<< ui->spinBox_2->value()<< ui->comboBox_3->currentText()<< ui->spinBox_3->value();
}

5,Date Edit & Time Edit

属性

说明

dateTime

时间日期的值. 形如 2000/1/1 0:00:00

date

单纯日期的值. 形如 2001/1/1

time

单纯时间的值. 形如 0:00:00

displayFormat

时间日期格式. 形如 yyyy/M/d H:mm

. y 表示年份 . M 表示月份 . d 表示日期

. H 表示小时 . m 表示分钟 . s 表示秒

注意: 这里的格式化符号的含义, 不要记忆.

不同语言/库的设定规则 是存在差异的.

一定是用的时候再去查.

minimumDateTime

最小时间日期

maximumDateTime

最大时间日期

timeSpec

. Qt::LocalTime :显示本地时间。

. Qt::UTC :显示协调世界时( UTC)。

. Qt::OffsetFromUTC :显示相对于UTC的偏移量(时差).

示例

void test::on_pushButton_clicked()
{QDateTime timeOld = ui->dateTimeEdit->dateTime();QDateTime timeNew = ui->dateTimeEdit_2->dateTime();int days = timeOld.daysTo(timeNew);int seconds = timeOld.secsTo(timeNew);int hours = (seconds/3600) % 24;ui->label->setText(QString("爱你以及持续了") + QString::number(days)+ QString(" 天零 ") +  QString::number(hours)+ QString("小时"));
}

6,Dial

核心属性

属性

说明

value

持有的数值.

minimum

最小值

maximum

最大值

singleStep

按下方向键的时候改变的步长.

pageStep

按下 pageUp / pageDown 的时候改变的步长.

sliderPosition

界面上旋钮显示的初始位置

tracking

外观是否会跟踪数值变化.

默认值为 true. 一般不需要修改.

wrapping

是否允许循环调整.

即数值如果超过最大值, 是否允许回到最小值.

(调整过程能否 "套圈")

notchesVisible

是否显示刻度线

notchTarget

刻度线之间的相对位置.

数字越大, 刻度线越稀疏.

核心信号

属性

说明

valueChanged(int)

数值改变时触发

rangeChanged(int, int)

范围变化时触发

7,Slider

核心属性

属性

说明

value

持有的数值.

minimum

最小值

maximum

最大值

singleStep

按下方向键的时候改变的步长.

pageStep

按下 pageUp / pageDown 的时候改变的步长.

sliderPosition

滑动条显示的初始位置

tracking

外观是否会跟踪数值变化.

默认值为 true. 一般不需要修改.

orientation

滑动条的方向是水平还是垂直

invertedAppearance

是否要翻转滑动条的方向

tickPosition

刻度的位置.

tickInterval

刻度的密集程度.

核心信号

属性

说明

valueChanged(int)

数值改变时触发

rangeChanged(int, int)

范围变化时触发

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 使用快捷键,需要用到QShortCut类// 需要两个快捷键,-进行减少,=进行增加(=和+是一个按钮)QShortcut* shortCut1 = new QShortcut(this);shortCut1->setKey(QKeySequence("-"));QShortcut* shortCut2 = new QShortcut(this);shortCut2->setKey(QKeySequence("="));// 使用信号槽,感知到快捷键被按下connect(shortCut1, &QShortcut::activated, this, &test::sunValue);connect(shortCut1, &QShortcut::activated, this, &test::addValue);    
}test::~test()
{delete ui;
}void test::sunValue()
{// 获取到当前的值int value = ui->horizontalSlider->value();if (value <= ui->horizontalSlider->minimum()){return;}ui->horizontalSlider->setValue(value - 5);
}void test::addValue()
{// 获取到当前的值int value = ui->horizontalSlider->value();if (value <= ui->horizontalSlider->minimum()){return;}ui->horizontalSlider->setValue(value - 5);
}void test::on_horizontalSlider_valueChanged(int value)
{ui->label->setText("当前的值为:" + QString::number(value));
}

六、多元素控件

1,QListWidget

核心属性

属性

说明

currentRow

当前被选中的是第几行

count

一共有多少行

sortingEnabled

是否允许排序

isWrapping

是否允许换行

itemAlignment

元素的对齐方式

selectRectVisible

被选中的元素矩形是否可见

spacing

元素之间的间隔

核心方法

方法

说明

addItem(const QString& label)

addItem(QListWidgetItem *item)

列表中添加元素.

currentItem()

返回 QListWidgetItem* 表示当前选中的元素

setCurrentItem(QListWidgetItem* item)

设置选中哪个元素

setCurrentRow(int row)

设置选中第几行的元素

insertItem(const QString& label, int row)

insertItem(QListWidgetItem *item,int row)

在指定的位置插入元素

item(int row)

返回 QListWidgetItem* 表示第 row 行的元素

takeItem(int row)

删除指定行的元素,

返回 QListWidgetItem* 表示是哪个元素被删除了

核心信号

方法

说明

currentItemChanged(QListWidgetItem* current, QListWidgetItem* old)

选中不同元素时会触发.

参数是当前选中的元素和之前选中的元素.

currentRowChanged(int)

选中不同元素时会触发.

参数是当前选中元素的行数.

itemClicked(QListWidgetItem* item)

点击某个元素时触发

itemDoubleClicked(QListWidgetItem* item)

双击某个元素时触发

itemEntered(QListWidgetItem* item)

鼠标进入元素时触发

核心方法

方法

说明

setFont

设置字体

setIcon

设置图标

setHidden

设置隐藏

setSizeHint

设置尺寸

setSelected

设置是否选中

setText

设置文本

setTextAlignment

设置文本对齐方式.

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 往里面添加元素ui->listWidget->addItem(new QListWidgetItem("C++"));ui->listWidget->addItem(new QListWidgetItem("JAVA"));ui->listWidget->addItem(new QListWidgetItem("Python"));// QListWidgetItem中,可以设置字体属性/图标/文字大小/是否选中
}test::~test()
{delete ui;
}void test::on_pushButton_clicked()
{// 先获取输入框内容,添加到QWidget中const QString &text = ui->lineEdit->text();// 添加到QListWidget中ui->listWidget->addItem(text);
}void test::on_pushButton_2_clicked()
{// 先获取到被选中的元素是哪个int row = ui->listWidget->currentRow();if(row < 0) {return;}// 按照行号来删除ui->listWidget->takeItem(row);
}void test::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{// 通过这个槽函数感知到变化if(current != nullptr){qDebug()<<"当前选中的元素"<<current->text();}if(current != nullptr){qDebug()<<"上次选中的元素"<<current->text();}
}

2,QTableWidget

方法

说明

item(int row, int column)

根据行数列数获取指定的

setItem(int row, int column,

QTableWidget*)

根据行数列数设置表格中的元素

currentItem()

返回被选中的元素 QTableWidgetItem*

currentRow()

返回被选中元素是第几行

currentColumn()

返回被选中元素是第几列

row(QTableWidgetItem* )

获取指定 item 是第几行

column(QTableWidgetItem* )

获取指定 item 是第几列

rowCount()

获取行数

columnCount()

获取列数

insertRow(int row)

在第 row 行处插入新行

insertColumn(int column)

在第 column 列插入新列

removeRow(int row)

删除第 row 行

removeColumn(int column)

删除第 column 列

setHorizontalHeaderItem(int

column,QTableWidget*)

设置指定列的表头

setVerticalHeaderItem(int row, QTableWidget*)

设置指定行的表头

核心信号

信号

说明

cellClicked(int row, int column)

点击单元格时触发

cellDoubleClicked(int row, int

column)

双击单元格时触发

cellEntered(int row, int column)

鼠标进入单元格时触发

currentCellChanged(int row, int column,int previousRow, int previousColumn)

选中不同单元格时触发

核心方法

方法

说明

row()

获取当前是第几行

column()

获取当前是第几列

setText(const QString&)

设置文本

setTextAlignment(int)

设置文本对齐

setIcon(const QIcon&)

设置图标

setSelected(bool)

设置被选中

setSizeHints(const QSize&)

设置尺寸

setFont(const QFont&)

设置字体

示例

void test::on_pushButton_insertRow_clicked()
{// 新增一行int rowCount = ui->tableWidget->rowCount();ui->tableWidget->insertRow(rowCount);
}void test::on_pushButton_insertColum_clicked()
{// 新增一列int curColumn = ui->tableWidget->columnCount();ui->tableWidget->insertColumn(curColumn);const QString& text = ui->lineEdit->text();ui->tableWidget->setHorizontalHeaderItem(curColumn,new QTableWidgetItem(text));
}void test::on_pushButton_deletRow_clicked()
{// 删除选中行int curRow = ui->tableWidget->currentRow();ui->tableWidget->removeRow(curRow);
}void test::on_pushButton_deleteColum_clicked()
{// 删除选中列int curColumn = ui->tableWidget->currentColumn();ui->tableWidget->insertColumn(curColumn);
}

3,QTreeWidget

方法

说明

clear

清空所有子节点

addTopLevelItem(QTreeWidgetItem* item)

新增顶层节点

topLevelItem(int index)

获取指定下标的顶层节点.

topLevelItemCount()

获取顶层节点个数

indexOfTopLevelItem(QTreeWidgetItem* item)

查询指定节点是顶层节点中的下标

takeTopLevelItem(int index)

删除指定的顶层节点. 返回 QTreeWidgetItem* 表示被删除的元素

currentItem()

获取到当前选中的节点, 返回 QTreeWidgetItem*

setCurrentItem(QTreeWidgetItem* item)

选中指定节点

setExpanded(bool)

展开/关闭节点

setHeaderLabel(const QString& text)

设置 TreeWidget 的 header 名称.

核心信号

信号

说明

currentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* old)

切换选中元素时触发

itemClicked(QTreeWidgetItem* item, int col)

点击元素时触发

itemDoubleClicked(QTreeWidgetItem* item, int col)

双击元素时触发

itemEntered(QTreeWidgetItem* item, int col)

鼠标进入时触发

itemExpanded(QTreeWidgetItem* item)

元素被展开时触发

itemCollapsend(QTreeWidgetItem* item)

元素被折叠时触发

核心属性

属性

说明

text

持有的文本

textAlignment

文本对齐方式

icon

持有的图表

font

文本字体

hidden

是否隐藏

disabled

是否禁用

expand

是否展开

sizeHint

尺寸大小

selected

是否选中

核心方法

方法

说明

addChild(QTreeWidgetItem* child)

新增子节点

childCount()

子节点的个数

child(int index)

获取指定下标的子节点. 返回 QTreeWidgetItem*

takeChild(int index)

删除对应下标的子节点

removeChild(QTreeWidgetItem* child)

删除对应的子节点

parent()

获取该元素的父节点

示例

test::test(QWidget *parent): QWidget(parent), ui(new Ui::test)
{ui->setupUi(this);// 设置根节点的名字ui->treeWidget->setHeaderLabel("动物");// 新增顶层节点QTreeWidgetItem* item1 = new QTreeWidgetItem();// 每个节点设置多个列item1->setText(0, "猫");// 添加到顶层节点当中ui->treeWidget->addTopLevelItem(item1);// 新增顶层节点QTreeWidgetItem* item2 = new QTreeWidgetItem();// 每个节点设置多个列item2->setText(0, "狗");// 添加到顶层节点当中ui->treeWidget->addTopLevelItem(item2);// 新增顶层节点QTreeWidgetItem* item3 = new QTreeWidgetItem();// 每个节点设置多个列item3->setText(0, "鸟");// 添加到顶层节点当中ui->treeWidget->addTopLevelItem(item3);// 添加子节点QTreeWidgetItem* item4 = new QTreeWidgetItem();item4->setText(0, "中华田园猫");item1->addChild(item4);QTreeWidgetItem* item5 = new QTreeWidgetItem();item5->setText(0, "布偶猫");item1->addChild(item5);QTreeWidgetItem* item6 = new QTreeWidgetItem();item6->setText(0, "暹罗猫");item1->addChild(item6);
}test::~test()
{delete ui;
}void test::on_pushButton_insertTop_clicked()
{// 获取到输入框中的内容const QString& text = ui->lineEdit->text();// 构造一个QTreeWidgetItemQTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);// 添加到顶层节点当中ui->treeWidget->addTopLevelItem(item);
}void test::on_pushButton_insertItem_clicked()
{// 获取到当前选中的节点QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if(currentItem == nullptr){return;}// 获取到输入框的内容const QString& text = ui->lineEdit->text();if(currentItem == nullptr){return;}// 构造一个 QTreeWidgetItemQTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);// 插入到选中节点的子节点当中currentItem->addChild(item);
}void test::on_pushButton_deleteItem_clicked()
{// 先获取到选中的元素QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if(currentItem == nullptr){return;}// 删除选中的元素,先获取父元素,再通过父元素删除QTreeWidgetItem* parent = currentItem->parent();if(parent == nullptr){int index = ui->treeWidget->indexOfTopLevelItem(currentItem);ui->treeWidget->takeTopLevelItem(index);}else{parent->removeChild(currentItem);}
}

七、容器类控件

1,Group Box

核心属性

属性

说明

title

分组框的标题

alignment

分组框内部内容的对齐方式

flat

是否是 "扁平" 模式

checkable

是否可选择.

设为 true, 则在 title 前方会多出一个可勾选的部分.

checked

描述分组框的选择状态 (前提是 checkable 为 true)

示例

2,Tab Widget

核心属性

属性

说明

tabPosition

标签页所在的位置.

. North 上方

. South 下方

. West 左侧

. East 右侧

currentIndex

当前选中了第几个标签页 (从 0 开始计算)

currentTabText

当前选中的标签页的文本

currentTabName

当前选中的标签页的名字

currentTabIcon

当前选中的标签页的图标

currentTabToolTip

当前选中的标签页的提示信息

tabsCloseable

标签页是否可以关闭

movable

标签页是否可以移动

核心信号

属性

说明

currentChanged(int)

在标签页发生切换时触发, 参数为被点击的选项卡编号.

tabBarClicked(int)

在点击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.

tabBarDoubleClicked(int)

在双击选项卡的标签条的时候触发. 参数为被点击的选项卡编号.

tabCloseRequest(int)

在标签页关闭时触发. 参数为被关闭的选项卡编号.

示例

void test::on_pushButton_clicked()
{// 使用addTab方法创建新的标签页// 参数1 要指定一个QWidget// 参数2 要指定这个标签页的 text(标题),此处标题就叫做 Tab + 数字int count = ui->tabWidget->count();QWidget* w = new QWidget();ui->tabWidget->addTab(w, QString("Tab ") + QString::number(count + 1));// 添加一个QLabel显示内容QLabel* label = new QLabel(w);label->setText(QString("标签页") + QString::number(count + 1));label->resize(100,50);// 设置新的标签页被选中ui->tabWidget->setCurrentIndex(count);
}void test::on_pushButton_2_clicked()
{int index = ui->tabWidget->currentIndex();ui->tabWidget->removeTab(index);
}

八、布局管理器

1,垂直布局

核心属性

属性

说明

layoutLeftMargin

左侧边距

layoutRightMargin

右侧边距

layoutTopMargin

上方边距

layoutBottomMargin

下方边距

layoutSpacing

相邻元素之间的间距

示例

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建三个按钮QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");// 创建布局管理器, 并且把按钮添加进去// 如果创建的时候指定父元素为 this, 则后面不需要 setLayout 方法了.QVBoxLayout* layout = new QVBoxLayout();layout->addWidget(btn1);layout->addWidget(btn2);layout->addWidget(btn3);// 把布局管理器设置到 widget 中this->setLayout(layout);
}

2,水平布局

核心属性

属性

说明

layoutLeftMargin

左侧边距

layoutRightMargin

右侧边距

layoutTopMargin

上方边距

layoutBottomMargin

下方边距

layoutSpacing

相邻元素之间的间距

示例

1 Widget::Widget(QWidget *parent)
2     : QWidget(parent)
3     , ui(new Ui::Widget)
4 {
5     ui->setupUi(this);
6
7     // 创建三个按钮
8     QPushButton* btn1 = new QPushButton("按钮1");
9     QPushButton* btn2 = new QPushButton("按钮2");
10     QPushButton* btn3 = new QPushButton("按钮3");
11
12     // 创建布局管理器
13     QHBoxLayout* layout = new QHBoxLayout();
14     layout->addWidget(btn1);
15     layout->addWidget(btn2);
16     layout->addWidget(btn3);
17
18     // 设置 layout 到 widget 上
19     this->setLayout(layout);
20 }

3,网格布局

核心属性

属性

说明

layoutLeftMargin

左侧边距

layoutRightMargin

右侧边距

layoutTopMargin

上方边距

layoutBottomMargin

下方边距

layoutHorizontalSpacing

相邻元素之间水平方向的间距

layoutVerticalSpacing

相邻元素之间垂直方向的间距

layoutRowStretch

行方向的拉伸系数

layoutColumnStretch

列方向的拉伸系数

示例

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建三个按钮QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");QPushButton* btn3 = new QPushButton("按钮3");// 创建布局管理器QHBoxLayout* layout = new QHBoxLayout();layout->addWidget(btn1);layout->addWidget(btn2);layout->addWidget(btn3);// 设置 layout 到 widget 上this->setLayout(layout);// 设置 layout 到窗口中.this->setLayout(layout);
}

4,表单布局

除了上述的布局管理器之外, Qt 还提供了QForm Layout, 属于是QGridLayout的特殊情况, 专门用于实现两列表单的布局。这种表单布局多用于让用户填写信息的场景. 左侧列为提示, 右侧列为输入框。

示例 : 使用QForm Layout创建表单

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 创建 layoutQFormLayout* layout = new QFormLayout();this->setLayout(layout);// 创建三个 labelQLabel* label1 = new QLabel("姓名 ");QLabel* label2 = new QLabel("年龄 ");QLabel* label3 = new QLabel("电话 ");// 创建三个 lineEditQLineEdit* lineEdit1 = new QLineEdit();QLineEdit* lineEdit2 = new QLineEdit();QLineEdit* lineEdit3 = new QLineEdit();// 创建一个提交按钮QPushButton* btn = new QPushButton("提交 ");// 把上述元素添加到 layout 中layout->addRow(label1, lineEdit1);layout->addRow(label2, lineEdit2);layout->addRow(label3, lineEdit3);layout->addRow(NULL, btn);
}

5,Spacer

核心属性

属性

说明

width

宽度

height

高度

hData

水平方向的 sizePolicy 值。

QSizePolicy::Ignored : 忽略控件的尺⼨,不对布局产⽣影响。

QSizePolicy::Minimum : 控件的最⼩尺⼨为固定值,布局时不会超过该值。

QSizePolicy::Maximum : 控件的最⼤尺⼨为固定值,布局时不会⼩于该值。

QSizePolicy::Preferred : 控件的理想尺⼨为固定值,布局时会尽量接近该值。

QSizePolicy::Expanding : 控件的尺寸可以根据空间调整 ,尽可能占据更多空间。

QSizePolicy::Shrinking : 控件的尺寸可以根据空间调整 ,尽可能缩小以适应空间。

vData

垂直方向的 sizePolicy

选项同上.

示例

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QHBoxLayout* layout = new QHBoxLayout();this->setLayout(layout);QPushButton* btn1 = new QPushButton("按钮1");QPushButton* btn2 = new QPushButton("按钮2");// 创建 SpacerQSpacerItem* spacer = new QSpacerItem(200, 20);layout->addWidget(btn1);// 在两个 widget 中间添加空白layout->addSpacerItem(spacer);layout->addWidget(btn2);
}

http://www.xdnf.cn/news/734239.html

相关文章:

  • wheelgames
  • C++17新特性 类型推导
  • 虚拟化数据恢复—XenServer虚拟机虚拟磁盘文件丢失的数据恢复案例
  • 集成测试 maestro-我的第一个flow以及第一次云端测试
  • React和原生事件的区别
  • π0-FAST-针对VLA模型的高效动作token化技术-2025.1.16-开源
  • 使用 Fetch + Streams 处理流式响应(Streaming Response)
  • Odoo OWL 框架深度研究(VIP10万字版)
  • 特伦斯 S75 电钢琴:重构演奏美学的极致表达
  • 小黑大语言模型应用探索:langchain智能体构造源码demo搭建1(初步流程)
  • OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论
  • 深入解析 Redis Cluster 架构与实现(二)
  • 【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest。
  • 数据结构:导论
  • SpringBatch+Mysql+hanlp简版智能搜索
  • matlab计算转子系统的固有频率、振型、不平衡响应
  • StringBuilder对象的操作
  • cocos creator资源管理器,资源动态加载和释放
  • 基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问
  • 【google 论文】Titans: Learning to Memorize at Test Time
  • 裂缝仪在线监测装置:工程安全领域的“实时守卫者”
  • DrissionPage WebPage模式:动态交互与高效爬取的完美平衡术
  • C# 将HTML文档、HTML字符串转换为图片
  • Window10+ 安装 go环境
  • 深入探索:基于 Nacos 的配置管理之动态配置与环境管理
  • Lifecycle原理
  • 低秩矩阵、奇异值矩阵和正交矩阵
  • 【FlashRAG】本地部署与demo运行(一)
  • ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析
  • AI时代的园区网变革:“极简”行至最深处,以太彩光恰自来