我们差不多把QT的基础部分讲差不多了。接下来我们把一些组件介绍一下,最后再开始QT的进阶部分,需要先把基础打牢嘛,也当是练习练习怎么使用QT助手了。
就按照QtDesigner里的顺序,今天我们讲一讲Buttons,也就是按钮组件。
因为这个系列的第二篇,学习使用QT助手的那一篇里我是以QPushButton为例的,并且QPushButton也是最常用的,相信大家也都懂的怎么用了,因此我们跳过第一个组件,直接开始第二个组件QToolButton。
QToolButton
用QT助手去查阅组件,我们首先要注意的点就是我红框框起来的地方。
第一个是我们要使用这个组件需要包含的头文件。
第二个是我们在配置文件里需要有的。
第三个是它这个组件继承于谁,很多基础的方法我们是需要从它祖上去查的。
那么我们今天就不查组件祖上了,我们就只看这些组件的特性。
我们看看他的公共函数。之前的文章提到过,以set开头的函数都是设置组件用的,因此我们从上面四个函数入手。
setArrowType
从它的名字就可以猜个大概出来,如果看得懂英文的小伙伴也可以直接从QT助手中知道这个函数是做什么的。
就是设置QToolButton的箭头图标的。
我们先初始化一个普普通通的QToolButton出来。
#include "Zhetu.h"
#include <QToolButton>
Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
this->setFixedSize(650, 400);
QToolButton* tb = new QToolButton(this);
tb->setFixedSize(100, 50);
}
Zhetu::~Zhetu()
{}
看得出来这个QToolButton和我们之前用的按钮不一样,这个按钮按下去没有任何反应。
我们再使用这个函数看看有什么不一样的。
我们点击QT助手里的超链接跳转到参数类型里寻找可以填入的参数。
看的出来默认是第一个,也就是无箭头,我们随便选一个看看效果。
所以看的出来这个函数是做什么用的了,但是好像并没有什么卵用,按钮还是点击没有任何效果。
我们接着看下一个函数。
setAutoRaise
根据名字我们得知,这个函数设置我们的QToolButton是否自动提升,参数是一个布尔值,默认是false,那么我们就给它设置为true看看什么效果。
边框消失了。。。消失了。。。所以这玩意有啥用。。。
setMenu
Menu我们都懂,就是菜单,我们之前接触菜单是在QMainWindow中的菜单栏里,而这个QToolButton可以设置菜单,至此我们就算明了这个组件到底是做什么用的了,就是给我们提供一个移动菜单的载体,而不必非要在菜单栏里才可以得到菜单了,虽然我觉得挺鸡肋的。
我们就按照添加菜单到菜单栏的步骤给QToolButton添加一个菜单。
#include "Zhetu.h"
#include <QToolButton>
Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
this->setFixedSize(650, 400);
QToolButton* tb = new QToolButton(this);
tb->setFixedSize(100, 50);
QMenu* m = new QMenu(this);
m->addAction("one");
m->addAction("two");
tb->setMenu(m);
}
Zhetu::~Zhetu()
{}
看的出来QToolButton变了个样,可以看得出是有内容的,但是点击却还是没有反应。
这时候需要请出我们最后一个函数了。
setPopupMode
直译是设置弹出模式,不难想到,就是设置菜单的弹出方式,默认是DelayedPopup,也就是延时弹出,所以我们之前点击按钮一样是没有反应的。
一共是三个可以选的参数,看不懂没关系,我们翻译一下。
可以看的出来,默认是需要长按QToolButton才会弹出菜单。
而第三个选项是点击就立刻弹出菜单,这个才是我们最需要使用的。
QRadioButton&QCheckButton
这俩按钮我们一起将,因为都比较简单,而且功能是差不多的。
在QtDesigner中我们就能直观地看出它们都是拿来勾选用的。
我们直接使用QRadioButton演示一下,因为它除了构造函数之外没有别的什么函数了。因此我们使用它还是得靠它的父类的函数。
#include "Zhetu.h"
#include <QRadioButton>
#include <qdebug.h>
Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
this->setFixedSize(650, 400);
QRadioButton* rb = new QRadioButton("rb", this);
connect(rb, &QRadioButton::clicked, []() {
qDebug() << "click!";
});
}
Zhetu::~Zhetu()
{}
像上面这样,我们就成功的通过信号(继承于父类的信号)与槽来获取到是否选中了这个QRadioButton了。
QCheckBox其实也一样,不过它比QRadioButton相比多了点函数,我们一样是直接演示使用。
#include "Zhetu.h"
#include <QCheckBox>
#include <qdebug.h>
Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
this->setFixedSize(650, 400);
QCheckBox* cb = new QCheckBox("cb", this);
cb->setCheckState(Qt::PartiallyChecked);
connect(cb, &QCheckBox::clicked, [&]() {
qDebug() << "click!";
});
}
Zhetu::~Zhetu()
{}
上面演示了通过setCheckState,我们可以使得这个选择框中出现了除了不选和选择的第三种情况。
这时候我们再请出剩下一个set函数。
这个函数使得我们的选择框一共是有三种状态,不选,半选,选择。
关于选择的这两个按钮就讲这么多,还是很简单的。
QCommandLinkButton
看的出它的函数也不多。
就一个setDescription,我们先等等,直接构造一个QCommandLinkButton出来看看效果。
#include "Zhetu.h"
#include <QCommandLinkButton>
#include <qdebug.h>
Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){
this->setFixedSize(650, 400);
QCommandLinkButton* clb = new QCommandLinkButton("CommandLinkButton", "Description", this);
clb->setFixedSize(200,100);
}
Zhetu::~Zhetu()
{}
看的出来这个按钮有两个文本,还附带一个小箭头。
根据英文的翻译,可以知道setDescription就是用来设置按钮中第二行比较小的文本的,我们就不另外演示了。
我们直接翻到QT助手中QCommandLinkButton的介绍。
看不懂我们就翻译一下。
所以我们就知道了,这个按钮就是等于普通按钮,只不过它自带了一个箭头图标。
QDialogButtonBox
剩下最后一个button了,其实从QtDesigner中我们就可以知道这个组件是做什么用的了。
没错,就是等于一次性给我们两个按钮。这和我们的QDialog对话框很像。
虽然它叫button,但是它继承的却是QWidget。
它的函数跟QDialog的使用也大差不差,涉及的函数也比较多,这里就不介绍了,可以返回上一篇文章再回顾一下QDialog。