内容目录
1. 显示控件
1.1 lable
lable控件在之前的控件综合的时候,我一直再用lable控件进行显示内容,其实lable我用得最多的就是显示图片和文字
如何显示文字
- 方法一
在ui设计里双击lable控件可以直接打字输入 - 方法二
在构建ui的时候赋值lable内容
ui->label->setText("战神柏柏");
如何显示图片
这里我们看到不只有图片还有gif动画
#include "widget.h"
#include "ui_widget.h"
#include <QMovie>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->label->setText("战神柏柏");
ui->label_2->setScaledContents(true);//设置图片自动缩放
ui->label_2->setPixmap(QPixmap(":/tailuo.png"));//贴图
ui->label_3->setScaledContents(true);
QMovie *m=new QMovie(":/lufei.gif");
ui->label_3->setMovie(m);
m->start();
}
Widget::~Widget()
{
delete ui;
}
我们在设置图片和视频的时候,图片的大小不会去适应我们的label框,上面的效果图是我们用代码操作,对图片进行自动缩放从而适应label框的大小,如果不写这行代码还想装下图片,我们必须鼠标拖动label控件,选择他的大小从而适应图片
1.2 textbrowser
textbrowser可以理解为一个多行的label控件
这里可以看到我们对里面的字体大小和形状以及图片还有链接都是可以进行操作的
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->textBrowser->setText("战神柏柏");//设置文字
ui->textBrowser->append("一键三连");//换行添加文字
}
Widget::~Widget()
{
delete ui;
}
我们在textbrowser中开始输入的为123,当我们对里面的内容进行操作时,settext会对内容进行覆盖,而append会对前面进行换行添加。
1.3 Lcd Number
这是一个数码显示的屏幕,我们也能用他来显示时间
这里我同样也做了一个自动更新显示时间的样例
这里的原理跟前面Demo2TimeEdit讲的原理是一样的,用到了信号与槽
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTime time=QTime::currentTime();//获取时间
ui->lcdNumber->display(time.toString("HH:mm:ss"));//赋值
qtimer.start(100);//计时器,每隔100毫秒更新一次
connect(&qtimer,&QTimer::timeout,this,&Widget::timesslot);//连接信号与槽
}
Widget::~Widget()
{
delete ui;
}
void Widget::timesslot()
{
ui->lcdNumber->display(QTime::currentTime().toString("HH:mm:ss"));//每次触发时更新
}
1.4 processbar
这里就是一个进度条控件,可以设置最大值,也可以设置最小值(这里不举例子,后面在做解释)
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->progressBar->setMaximum(100);//设置进度条最大值
ui->progressBar->setValue(50);//设置进度条当前值
}
Widget::~Widget()
{
delete ui;
}
1.5 Horizontal Line+Vertical Line
这两个其实就是两条线,为了美观可以随意操作,就相当于矩形画边线一样
1.6 Calendar Widget
这是一个日历,也是最开始我了解QT的一个日历软件,跟电脑上的日历一样,你可以对他进行任何操作,不需要代码,只需要拖过来直接使用。
2.容器控件
2.1 groupbox
groupbox顾名思义group分组,这个控件就可以把其他的控件拖拽进去进行排版,移动时只需要移动groupbox即可移动全部控件
这里我在groupbox放入三个控件,最上面显示的groupbox我们双击可以修改他的内容,也可以在右面设置中的flat添加一个横线
2.2 scrollArea
scrollArea控件是一个适应图片大小的控件且自带滚动条,这样我们就不需要像前面一样对放入的图片,再刻意添加滚动条,放入图片我们是用代码进行操作。(这里不要嫌弃麻烦,如果使用别的控件,我们可以不用代码添加图片,但是添加滚动条的时候,我们需要写代码来控制他的相对位置来改变图片的位置)
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QLabel *pImageLabel=new QLabel(this);
pImageLabel->setPixmap(QPixmap(":/tailuo.png"));//设置图片
ui->scrollArea->setWidget(pImageLabel);//设置一个界面
}
Widget::~Widget()
{
delete ui;
}
滚动条的打开我们可以选择让他是一直开启的状态,也可以关闭,同样也可以在图片的大小超出他的范围时自动开启,下面一个是水平滚动条,一个是竖直滚动条
2.3 toolBox
这个就是我们电脑端QQ登陆时,我们对QQ的好友分组,点开一个就会出现他的内容,toolBox对大部分控件都是可以放在里面的,例如Page2中,我放入的就是pushButton控件
添加页方式
①我们可以右键控件->添加页
②通过代码实现并且写上他的名字,因为是QPushButton类型,所以page顶呱呱中会有一个pushButton控件
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QPushButton *p=new QPushButton(this);
ui->toolBox->insertItem(3,p,"顶呱呱");
}
Widget::~Widget()
{
delete ui;
}
2.4 tabWidget
TabWidget提供了一系列的Tab选项卡的切换,每个选项卡都有自己的控件,原理跟toolBox一样。
我们可以在页面下放入自己的控件来进行某些操作
这里是tabWidget的设置
在tabWidget里设置tab窗口运行出来的时候会有关闭的×(在设置里选择),
这个×单击是关不上的,我们必须转到槽函数
其实在选择槽函数的时候,我们自己稍稍看一下就会知道大部分槽函数的意思,英语也需要略微占一点比重的。
void Widget::on_tabWidget_tabCloseRequested(int index)
{
ui->tabWidget->removeTab(index);//下标
}
2.5 stackedWidget
QStackedWidget理解为层叠窗口(堆栈窗口),提供了多页面切换的布局,每个选项卡下有自己的控件, StackedWidget类提供了多页面切换的布局,一次只能看到一个界面。
这就是他构建出来的样子,这里用了pushButton来显示他的页数
代码示例
void Widget::on_pushButton_2_clicked()
{
ui->stackedWidget->setCurrentIndex(0);//按第一个pushButton显示第一页,这里填写的数字是他的下标,第一页从下标0开始
}
void Widget::on_pushButton_3_clicked()
{
ui->stackedWidget->setCurrentIndex(1);//按第一个pushButton显示第二页
}
2.6 qFrame
从这开始,可以选择不看,因为我不知道写啥,而且没啥技术含量
QFrame类是带有边框的部件的基类。它的子类有我们最为常用的标签部件QLabel,另外还有QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类。带边框部件最主要的特点就是可以有一个明显的边界框架。Frame类的主要功能也就是用来实现不同的边框效果,这主
要是由边框形状和边框阴影组合来形成的。
2.7 qWidget
QWidget类是所有用户界面对象的基类被称为基础窗口部件它可以作为其他部件 的容器QWidget继承自QObject类和QPaintDevice类其中QObject类是所有支持Qt 对象模型(Qt Object Model)的Qt对象的的基类QPaintDevice类是所有可以绘制的 对象的基类。
2.8 QMdiArea
QMdiArea一般使用于主窗口中,用于容纳多个子窗口
添加完之后直接往添加出来的窗口上添加控件就能用了
如果在子窗口上有一个控件,那么访问这个控件还是通过ui去访问
2.9 DockWidget
QDockWidget类;理解为悬浮(停靠)窗口,提供了一个特殊的窗口部件,它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。
这里我用的是QT给的实例展示
3.列表控件
3.1listWidget
双击可以直接修改,添加多少行,也有属性可以修改字体颜色大小等等
additem添加一行尾部添加
insertItem在某个位子添加一行
removeItemWidget移除行
信号:
currentRowChanged(int currentRow)选中的行有改变
itemSelectionChanged()选中的项有改变
ui->listWidget->insertItem(0,"123");//下标0出添加内容
ui->listWidget->addItem("adw");//尾部添加
3.2 treeWidget
树,直接双击就能添加,要加图标就在属性里面
#include "widget.h"
#include "ui_widget.h"
#include <QStyleFactory>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->treeWidget->setStyle(QStyleFactory::create("windows"));//改编成windows风格
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
qDebug()<<item->text(column);//输出内容
}
3.3 tableWidget
类似一个电子表格,双击添加内容,在属性里面对他进行设置
👇👇实例👇👇
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->tableWidget->verticalHeader()->setVisible(false);//隐藏列表头
ui->tableWidget->horizontalHeader()->setVisible(false);//隐藏行表头
//画表头下面的线
ui->tableWidget->horizontalHeader()->setStyleSheet("border-bottom-width:0.5px;border-style:outset;border-color:rgb(199,199,199)");
//自动适应宽列
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//隐藏默认行头
ui->tableWidget->verticalHeader()->setHidden(true);
//不能修改
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
for(int i=0;i<ui->tableWidget->rowCount()+1;i++)//行
{
for(int j=0;j<ui->tableWidget->columnCount();j++)//列
{
if(ui->tableWidget->item(i,j)!=nullptr)
{
qDebug()<<ui->tableWidget->item(i,j)->text();
}
}
}
}
----------------------------------------------------------------------------------------------------
4 结语
这里qt的全部控件已经总结完了 我真要吐了,后面我会写一些Qt的其他知识,肯定不会像其他大佬一样剖析的那么深入,但是我会的是肯定都会写下来的,给大家借鉴学习🍗🍗🍗