CSDN话题挑战赛第2期
参赛话题:Qt应用程序开发
8 常用控件
Qt为我们应用程序界面开发提供的一系列的控件,下面我们介绍两种最常用一些控件,所有控件的使用方法我们都可以通过帮助文档获取。
8.1 QLabel 控件使用
QLabel是我们最常用的控件之一,其功能很强大,我们可以用来显示文本,图片和动画等。
1、显示文字(普通文本、html)
通过QLabel类的setText函数设置显示的内容:
void setText(const QString &)
- 可以显示普通文本字符串
QLable *label = new QLable;
label->setText(“Hello, World!”);
-
可以显示HTML格式的字符串
比如显示一个链接:
QLabel * label = new QLabel(this);
label ->setText(“Hello, World”);
label ->setText(“
<a href=“https://www.baidu.com”>百度一下
”);label ->setOpenExternalLinks(true);
其中setOpenExternalLinks()函数是用来设置用户点击链接之后是否自动打开链接,如果参数指定为true则会自动打开。
2、显示动画
可以使用QLabel 的成员函数setMovie加载动画,可以播放gif格式的文件
void setMovie(QMovie * movie)
首先定义QMovied对象,并初始化:
QMovie *movie = new QMovie(“:/Mario.gif”);
播放加载的动画:
movie->start();
将动画设置到QLabel中:
QLabel *label = new QLabel;
label->setMovie(movie);
8.2 QLineEdit
Qt提供的单行文本编辑框。
1、设置/获取内容
- 获取编辑框内容使用text(),函数声明如下:
QString text() const
- 设置编辑框内容
void setText(const QString &)
2、设置显示模式
使用QLineEdit类的setEchoMode () 函数设置文本的显示模式,函数声明:
void setEchoMode(EchoMode mode)
EchoMode是一个枚举类型,一共定义了四种显示模式:
-
QLineEdit::Normal 模式显示方式,按照输入的内容显示。
-
QLineEdit::NoEcho 不显示任何内容,此模式下无法看到用户的输入。
-
QLineEdit::Password 密码模式,输入的字符会根据平台转换为特殊字符。
-
QLineEdit::PasswordEchoOnEdit 编辑时显示字符否则显示字符作为密码。
另外,我们再使用QLineEdit显示文本的时候,希望在左侧留出一段空白的区域,那么,就可以使用QLineEdit给我们提供的setTextMargins函数:
void setTextMargins(int left, int top, int right, int bottom)
用此函数可以指定显示的文本与输入框上下左右边界的间隔的像素数。
8.3 其他控件
Qt中控件的使用方法可参考Qt提供的帮助文档。
项目名称:08_OtherControl
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QMovie>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置默认值
//栈控件使用
//scrollArea按键
connect(ui->btn_scrollArea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
//toolBox按钮
connect(ui->btn_ToolBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
//TabWidget按钮
connect(ui->btn_GroupBox,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
});
//下拉框
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("特斯拉");
//选中特斯拉
connect(ui->btn_select,&QPushButton::clicked,[=](){
ui->comboBox->setCurrentIndex(2);
});
//利用QLabel显示图片
ui->lbl_Image->setPixmap(QPixmap(":/Image/butterfly.png"));
//利用QLabel显示,GIF动态图片
QMovie *movie = new QMovie(":/Image/mario.gif");
ui->lbl_movie->setMovie(movie);
//播放动图
movie->start();
}
Widget::~Widget()
{
delete ui;
}
运行效果图
8.4 自定义控件
在搭建Qt窗口界面的时候,在一个项目中很多窗口,或者是窗口中的某个模块会被经常性的重复使用。一般遇到这种情况我们都会将这个窗口或者模块拿出来做成一个独立的窗口类,以备以后重复使用。
在使用Qt的ui文件搭建界面的时候,工具栏栏中只为我们提供了标准的窗口控件,如果我们想使用自定义控件怎么办?
例如:我们从QWidget派生出一个类SmallWidget,实现了一个自定窗口,
// smallwidget.h
class SmallWidget : public QWidget
{
Q_OBJECT
public:
explicit SmallWidget(QWidget *parent = 0);
signals:
public slots:
private:
QSpinBox* spin;
QSlider* slider;
};
// smallwidget.cpp
SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{
spin = new QSpinBox(this);
slider = new QSlider(Qt::Horizontal, this);
// 创建布局对象
QHBoxLayout* layout = new QHBoxLayout;
// 将控件添加到布局中
layout->addWidget(spin);
layout->addWidget(slider);
// 将布局设置到窗口中
setLayout(layout);
// 添加消息响应
connect(spin,
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
slider, &QSlider::setValue);
connect(slider, &QSlider::valueChanged,
spin, &QSpinBox::setValue);
}
那么这个SmallWidget可以作为独立的窗口显示,也可以作为一个控件来使用:
打开Qt的.ui文件,因为SmallWidget是派生自Qwidget类,所以需要在ui文件中先放入一个QWidget控件, 然后再上边鼠标右键
弹出提升窗口部件对话框
添加要提升的类的名字,然后选择 添加
添加之后,类名会显示到上边的列表框中,然后单击提升按钮,完成操作.
我们可以看到, 这个窗口对应的类从原来的QWidget变成了SmallWidget
再次运行程序,这个widget_3中就能显示出我们自定义的窗口了.
项目名称:05_Qt_Contral
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置单选按钮 默认选中男
ui->rBtnMan->setChecked(true);
//选中女后 打印信息
connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){
qDebug()<<"选中女了";
});
//多选按钮 选中老板人好后 打印一句话
//选中返回2 未选中返回0
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state){
// qDebug()<<"老板人好";
qDebug()<<state;
});
}
MainWindow::~MainWindow()
{
delete ui;
}
运行效果图:
2、再添加listWidget组件后
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//设置单选按钮 默认选中男
ui->rBtnMan->setChecked(true);
//选中女后 打印信息
connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){
qDebug()<<"选中女了";
});
//多选按钮 选中老板人好后 打印一句话
//选中返回2 未选中返回0
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state){
// qDebug()<<"老板人好";
qDebug()<<state;
});
//利用listWidget 写诗
// QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
// //将一行诗放入到listWidget控件中
// ui->listWidget->addItem(item);
// //设置为水平居中
// item->setTextAlignment(Qt::AlignHCenter);
//QStringList QList<QString>
QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁知盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
}
MainWindow::~MainWindow()
{
delete ui;
}
运行效果图:
项目名称:06_TreeWidget
widget.cpp
#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,heroL2;
heroL1<<"刚被猪"<<"前排坦克,能在吸收伤害的同时造成可观的范围输出";
heroL2<<"船长"<<"前排坦克,能肉能输出能控场的全能英雄";
QTreeWidgetItem * l1 = new QTreeWidgetItem(heroL1);
QTreeWidgetItem * l2 = new QTreeWidgetItem(heroL2);
LiItem->addChild(l1);
LiItem->addChild(l2);
QStringList heroM1,heroM2;
heroM1<<"月骑"<<"中排物理输出,可以使用分裂利刃攻击多个目标";
heroM2<<"小鱼人"<<"前排战士,擅长偷取敌人的属性来增强自身战力";
QTreeWidgetItem * m1 = new QTreeWidgetItem(heroM1);
QTreeWidgetItem * m2 = new QTreeWidgetItem(heroM2);
MinItem->addChild(m1);
MinItem->addChild(m2);
QStringList heroZ1,heroZ2;
heroZ1<<"死灵法师"<<"前排法师坦克,魔法抗性较高,拥有治疗技能";
heroZ2<<"巫医"<<"后排辅助法师,可以使用奇特的巫术诅咒敌人与治疗队友";
QTreeWidgetItem * z1 = new QTreeWidgetItem(heroZ1);
QTreeWidgetItem * z2 = new QTreeWidgetItem(heroZ2);
ZhiItem->addChild(z1);
ZhiItem->addChild(z2);
}
Widget::~Widget()
{
delete ui;
}
运行效果图:
项目名称:07_TableWidget
widget.cpp
#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<<"亚瑟"<<"赵云"<<"张飞"<<"关羽"<<"花木兰";
QStringList 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;
}
运行结果:
如果对你有帮助的话,请不要忘了给我一点点点…支持 ( ^ o ^)/~