常用控件的使用
目录
1.Layouts
2.Spacers
3.Buttons
3.1Push Button
3.2Tool Button
3.3Radio Button
3.4Check Box
监听状态
4.Item Widgets
4.1List Widget
4.1.1利用listWidget写诗(1)
4.1.2利用listWidget写诗(2)
完整代码:
4.2Tree Widget
4.2.1设置水平头
4.2.2加载顶层的节点
4.2.3追加子节点
完整代码:
4.3Table Widget
4.3.1设置列数
4.3.2设置水平表头
4.3.3设置行数
4.3.4设置正文
完整代码:
5.其他常用控件
5.1Scroll Area
5.2Tool Box
5.2.1重命名
5.2.2增加页
5.2.3增加内容
5.3Tab Widget
5.3.1重命名
5.3.2增加页
5.4Stacked Widget
换页
设置默认页
5.5ComboBox
5.6Label
1.Layouts
布局,分为垂直布局,水平布局,栅格布局,表单布局,可以直接将要布局的一些组件拖拽到里面,便可以自动完成布局
但是一般我们不使用这种方法,我们会使用widget,将要布局的组件拖拽到widget里面再进行布局,更加灵活。
2.Spacers
弹簧,分为水平弹簧和垂直弹簧,用于调整各个组件之间的间隔以及组件与上下、左右窗口之间的距离。
例如:将两个PushButton放到widget中进行水平布局,再将两个Horizontal Spacer放到两边,再对整个窗口进行水平布局
这样,无论对窗口进行怎样的缩放,都可以让按钮位于窗口的中部
3.Buttons
3.1Push Button
常规按钮,通常用于触发信号使之连接对应的槽函数
代码实现信号和槽的初步认识-CSDN博客
ui界面实现:直接右击按钮,选择转到槽,选择对应的信号数,即可自动生成相应的槽函数。
3.2Tool Button
工具按钮,主要用于显示图片
首先需要添加资源:Qt添加资源文件-CSDN博客
添加完成之后,在右下角找到icon-选择资源-选择你需要的图片即可
可以通过iconSize来调整大小
可在text里面增加文本
当修改完后,发现按钮内并没有文本,这时需要调整toolButtonStyle,将其调整为ToolButtonTextBesideIcon即可
设置背景透明,当鼠标悬停在上面又有一个按钮的形状,直接勾选autoRaise
3.3Radio Button
允许用户在一个选项组中选择唯一的一个选项
想要实现选择多个便要借助GroupBox来进行分组,分别放入GroupBox中再进行垂直布局
我们发现运行结果没有默认值
想要设置默认值还是得用代码实现,设置单选按钮 男默认选中,先将性别里面的“男”的名字修改一下,方便写代码
代码:
ui->rBtnMan->setChecked(true);
实现选择女后,打印信息
connect(ui->rBtnWoman,&QRadioButton::clicked,[=]()
{
qDebug()<<"选中了女";
});
3.4Check Box
允许用户从多个选项中选择一个或多个选项。
和radio Button一样要放在Group Box中,只是radio Button是单选,Check Box可以多选
监听状态
为了更方便知道用户选了什么,可以将其状态打印出来
例如:想看用户是否选中了“干净卫生”
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state)
{
qDebug()<<state;
});
即2是表示选中了,0是表示未选中,至于为什么是2表示选中了而不是1呢
将tristate勾选上,再次运行
我们发现0对应的是不选,1对应的是半选,2对应的是选择
4.Item Widgets
4.1List Widget
用于显示列表的控件。 它可以在窗口中显示一个可滚动的列表,并且每个列表项都可以是一个文本项、图像项或自定义项。 QListWidget可以用于显示一组文本项,用户可以选择列表中的一项或多项。 它还可以用于显示一组图像项,用户可以通过点击图像项进行选择或执行其他操作。 用户还可以使用自定义项在列表中显示自定义的内容。
4.1.1利用listWidget写诗(1)
写完后放入到list Widget控件中
QListWidgetItem * item=new QListWidgetItem("锄禾日当午");
ui->listWidget->addItem(item);
设置水平居中
item->setTextAlignment(Qt::AlignHCenter);
4.1.2利用listWidget写诗(2)
代码:
QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
但是该种方法不能设置水平居中,可以利用for循环设置
完整代码:
#include "widget.h"
#include "ui_widget.h"
#include"QDebug"
#include"QListWidget"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置单选按钮 男默认选中
ui->rBtnMan->setChecked(true);
//选择女后,打印信息
connect(ui->rBtnWoman,&QRadioButton::clicked,[=]()
{
qDebug()<<"选中了女";
});
//多选按钮
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state)
{
qDebug()<<state;
});
//利用listWidget写诗
// QListWidgetItem * item=new QListWidgetItem("锄禾日当午");
// //将一行诗放入到list Widget控件中
// ui->listWidget->addItem(item);
// item->setTextAlignment(Qt::AlignHCenter);
//QStringList QList<QString>
QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
}
Widget::~Widget()
{
delete ui;
}
4.2Tree Widget
树控件,用于以树状结构显示数据。它在Windows系统中非常常见,例如资源管理器左侧的目录视图。树形控件的节点通常由标签和图标组成,能够清晰地展示数据的层次关系
在ui界面拖拽一个Tree Widget,再对整个窗口进行水平布局,这样就布满整个窗口了
4.2.1设置水平头
代码:
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");
4.2.2加载顶层的节点
代码:
QTreeWidgetItem * liItem=new QTreeWidgetItem(QStringList()<<"力量");
QTreeWidgetItem * minItem=new QTreeWidgetItem(QStringList()<<"敏捷");
QTreeWidgetItem * zhiItem=new QTreeWidgetItem(QStringList()<<"智力");
//加载顶层的节点
ui->treeWidget->addTopLevelItem(liItem);
ui->treeWidget->addTopLevelItem(minItem);
ui->treeWidget->addTopLevelItem(zhiItem);
4.2.3追加子节点
代码:
QStringList heroL1;
heroL1<<"钢背猪"<<"前排坦克,能在吸收伤害的同时造成可观的范围输出";
QTreeWidgetItem * l1=new QTreeWidgetItem(heroL1);
liItem->addChild(l1);
完整代码:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//treeWidget树控件使用
//设置水平头
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");
QTreeWidgetItem * liItem=new QTreeWidgetItem(QStringList()<<"力量");
QTreeWidgetItem * minItem=new QTreeWidgetItem(QStringList()<<"敏捷");
QTreeWidgetItem * zhiItem=new QTreeWidgetItem(QStringList()<<"智力");
//加载顶层的节点
ui->treeWidget->addTopLevelItem(liItem);
ui->treeWidget->addTopLevelItem(minItem);
ui->treeWidget->addTopLevelItem(zhiItem);
//追加子节点
QStringList heroL1;
heroL1<<"钢背猪"<<"前排坦克,能在吸收伤害的同时造成可观的范围输出";
QTreeWidgetItem * l1=new QTreeWidgetItem(heroL1);
liItem->addChild(l1);
}
Widget::~Widget()
{
delete ui;
}
4.3Table Widget
表格控件,类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。 整个 QTableWidget 表格可以分为 3 个区域: 区域 ① 和 ② 都是表头,区域 ① 设置每一行的表头,区域 ② 设置每一列的表头。
先在ui界面拖出这个控件
4.3.1设置列数
代码:
ui->tableWidget->setColumnCount(3);
4.3.2设置水平表头
代码:
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
4.3.3设置行数
代码:
ui->tableWidget->setRowCount(5);
4.3.4设置正文
代码:
ui->tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
用for循环填满表格
代码:
QStringList nameList;
nameList<<"张三"<<"李四"<<"王五"<<"赵二"<<"钱一";
QList<QString>sexList;
sexList<<"男"<<"男"<<"男"<<"男"<<"女";
for(int i=0;i<5;i++)
{
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList[i]));
//int转QString
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
}
完整代码:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//TableWidget控件
//设置列数
ui->tableWidget->setColumnCount(3);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(5);
//设置正文
// ui->tableWidget->setItem(0,0,new QTableWidgetItem("张三"));
QStringList nameList;
nameList<<"张三"<<"李四"<<"王五"<<"赵二"<<"钱一";
QList<QString>sexList;
sexList<<"男"<<"男"<<"男"<<"男"<<"女";
for(int i=0;i<5;i++)
{
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList[i]));
//int转QString
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
}
}
Widget::~Widget()
{
delete ui;
}
5.其他常用控件
5.1Scroll Area
滚动区域
例如:在里面放入很多的Push Button,再对他们进行垂直布局
5.2Tool Box
5.2.1重命名
在属性编辑器中找currentItem Text
5.2.2增加页
5.2.3增加内容
点击你想增加内容的页,将要增加的内容拖进去
5.3Tab Widget
网页
5.3.1重命名
5.3.2增加页
5.4Stacked Widget
栈控件,可以将其他页加进去
插入页
发现运行出来的界面并没有切换页面的按钮,所以得自己添加Push Button来实现
换页
增加按钮并重命名(Text),再修改objectName,方便后续调用
代码:
//栈控件使用
//scroll Area按钮
connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
});
//toolBox按钮
connect(ui->btn_toolBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
//TabWidget按钮
connect(ui->btn_tabWidget,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
设置默认页
ui->stackedWidget->setCurrentIndex(0);
这样无论运行前ui界面在哪一页,运行界面默认都在scrollArea那个界面
5.5ComboBox
下拉框
代码:
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("奥迪");
实现:点击按钮,选中奥迪
代码:
connect(ui->btn_select,&QPushButton::clicked,[=](){
//ui->comboBox->setCurrentIndex(2);//方法一
ui->comboBox->setCurrentText("奥迪");//方法二
});
5.6Label
利用QLabel显示图片,首先要添加资源文件,然后将Image文件粘贴到当前文件夹中