目录
005 Command Link Button (命令链接按钮)
006 Time Edit、Date Edit、Date/Time Edit(时间控件)
01 Qt控件详解:Layouts/Spacers
001 QtDesign设计
002 代码实现
0001 Grid Layout(网格/栅格布局)
此控件夫分为行和列组成,能够将控件放入一个网状栅格中,每个控件占一格或多行多列。
案例:
(1)创建widget新项目
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QGridLayout> //网格控件头文件
#include <QLabel> //标签控件头文件
#include <QPushButton> //命令按钮控制头文件
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QGridLayout *pGrid_layouts;
QPushButton *button1;
QPushButton *button2;
QPushButton *button3;
QPushButton *button4;
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
button1 = new QPushButton(this); //生成一个命令按钮并指向button1
button1 -> setText("第一区:顶部菜单栏选项"); //设置button1按钮文本显示
button1 -> setFixedHeight(40); //设置button1按钮固定高度
button1 ->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); //设置按钮随布局缩放变化形式
button2 = new QPushButton(this);
button2 -> setText("第二区:侧边栏选项");
button2 -> setFixedWidth(150); //设置button2按钮固定宽度
button2 ->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button3 = new QPushButton(this);
button3 -> setText("第三区:底部选项");
button3 -> setFixedHeight(150);
button3 ->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
button4 = new QPushButton(this);
button4 -> setText("第四区:子窗体选项");
button4 ->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
pGrid_layouts = new QGridLayout(); //创建布局
//设置布局左侧 顶部 右侧 底部边距
pGrid_layouts->setContentsMargins(0,0,0,0);
// pGrid_layouts ->setMargin(30); //设置控件与其他对象之间左右距离30,Qt6中此命令已无效
pGrid_layouts ->setSpacing(40); //设置控件与其他对象之间上下距离40
// pGrid_layouts ->setSpacing(0); //设置布局间隔
//显示位置
/*
addWidget(参数1,参数2,参数3,参数4,参数5,参数6)
参数1:要插入的子布局对象
参数2:插入的开始行
参数3:插入的开始列
参数4:占用的行数
参数5:占用的列数
参数6:指定对齐方式
*/
pGrid_layouts -> addWidget(button1,0,1);
pGrid_layouts -> addWidget(button2,0,0,3,1);
pGrid_layouts -> addWidget(button3,2,1);
pGrid_layouts -> addWidget(button4,1,1);
setLayout(pGrid_layouts);
}
Widget::~Widget()
{
}
0002 Form Layout(表单布局)
案例:
(1)创建widget新项目
(2)修改"widget.cpp"文件
#include "widget.h"
#include <QFormLayout>
#include <QLineEdit>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{ setFixedSize(250,200); //设置窗口大小
//创建表单布局指针
QFormLayout *qLayout = new QFormLayout(this);
QLineEdit *le1 = new QLineEdit(); //输入学校
QLineEdit *le2 = new QLineEdit(); //输入学号
QLineEdit *le3 = new QLineEdit(); //输入姓名
qLayout -> addRow("学校",le1);
qLayout -> addRow("学号",le2);
qLayout -> addRow("姓名",le3);
qLayout -> setSpacing(8); //设置控件之间的间隔
// qLayout -> setRowWrapPolicy(QFormLayout::WrapAllRows); //WrapAllRows将标签显示在单行编辑框上面
qLayout -> setRowWrapPolicy(QFormLayout::WrapLongRows); //WrapAllRows将标签与单行编辑框显示在同一行
qLayout -> setLabelAlignment(Qt::AlignLeft); //设置标签对齐方式为左对齐
setWindowTitle("表单布局测试案例");
}
Widget::~Widget()
{
}
02 Qt控件详解:Buttons
001 Push Button(命令按钮)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton> //引入QPushButton类对应的头文件
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明两个QPushButton对象
QPushButton *pb1,*pb2;
private slots:
//声明对象pb1、pb2对应的槽函数
void pushbutton1_clicked();
void pushbutton2_clicked();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setGeometry(300,150,500,300); //设置窗口位于显示器的位置(4个参数确定窗口左上角点,右下角点位于电脑屏幕的位置)
pb1 = new QPushButton("命令按钮1",this); //实例化按钮
pb2 = new QPushButton("命令按钮2",this); //实例化按钮
//设置两个QPushButton对象的坐标位置
pb1 -> setGeometry(20,20,150,50);
pb2 -> setGeometry(20,90,150,50);
//与信号槽函数链接
connect(pb1,SIGNAL(clicked()),this,SLOT(pushbutton1_clicked()));
connect(pb2,SIGNAL(clicked()),this,SLOT(pushbutton2_clicked()));
}
MainWindow::~MainWindow()
{
}
//对象pb1,pb2的槽函数
void MainWindow::pushbutton1_clicked()
{
//执行槽函数将窗口背景改为黄色
this->setStyleSheet("QMainWindow{background-color:rgba(255,255,0,100%);}");
}
void MainWindow::pushbutton2_clicked()
{
this->setStyleSheet("QMainWindow{background-color:rgba(255,0,0,100%);}");
}
(4)结果演示
002 Tool Button(工具按钮)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QToolBar> //引入QToolBar类
#include <QToolButton> //引入QToolButton类
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明一个QToolButton对象和QToolBar对象
//这两个对象是集合与元素之间的关系,工具条是用来放置工具按钮的
QToolBar *tbar;
QToolButton *tbutton;
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include <QApplication>
#include <QStyle>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口运行位置
this ->setGeometry(300,150,500,300);
//将QToolBar对象进行实例化
tbar = new QToolBar(this);
tbar -> setGeometry(20,20,200,50); //设置按钮的位置
//将QStyle类对象进行实例化,主要目的是设置风格,图标是系统自带
QStyle *sty = QApplication::style();
QIcon ico = sty->standardIcon(QStyle::SP_TitleBarContextHelpButton); //将系统默认图标加载进来
//将QtoolButton对象进行实例化
tbutton = new QToolButton();
tbutton->setIcon(ico);
tbutton->setText("系统帮助提示"); //设置将要显示文本
//调用setToolButtonStyle函数设置tbutton样式,设置文本在图标下方
tbutton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
//将tbutton添加到tbar工具条中
tbar->addWidget(tbutton);
}
MainWindow::~MainWindow()
{
}
(4)结果演示
003 Radio Button(单选框按钮)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QRadioButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明2个QRadioButton对象radb1,radb2
QRadioButton *radb1,*radb2;
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口运行位置
this ->setGeometry(300,150,500,300);
// this ->setStyleSheet("QMainWindow{background-color:rgba(255,0,0,100%);}");
//将QRadioButton类的两个对象进行实例化
radb1 = new QRadioButton(this);
radb2 = new QRadioButton(this);
//设置两个QRadioButton对象位置
radb1->setGeometry(20,20,150,40);
radb2->setGeometry(20,80,150,40);
//设置两个单选框按钮文本
radb1->setText("选择按钮1");
radb2->setText("选择按钮2");
//设置命令按钮默认选中值Checked false true
radb1 -> setChecked(true);
radb2 -> setChecked(false);
}
MainWindow::~MainWindow()
{
}
(4)结果演示
004 Check Box(复选框按钮)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCheckBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明1个QCheckBox对象
QCheckBox *cb;
private slots:
//声明QCheckBox槽函数,在操作过程当中并且带参数传递,通过这个参数接收信号
void checkboxstate(int);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口运行位置
this ->setGeometry(300,150,500,300);
this ->setStyleSheet("QMainWindow{background-color:rgba(85,85,54,100%);}");
//实例化操作
cb = new QCheckBox(this);
cb -> setGeometry(30,50,250,50);
cb -> setCheckState(Qt::Checked); //初始化三态复选框状态:Checked
cb -> setText("初始化状态为:Checked状态");
cb -> setTristate(); //开启三台模式,必须开启,否则只有两种状态(Checked和Unchecked)
connect(cb,SIGNAL(stateChanged(int)),this,SLOT(checkboxstate(int)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::checkboxstate(int istate)
{
//判断checkbox的状态
switch(istate)
{
case Qt::Checked: //选中状态
cb -> setText("选中状态:OK");
break;
case Qt::Unchecked: //未选中状态
cb -> setText("未选中状态:NO");
break;
case Qt::PartiallyChecked: //半选中状态
cb -> setText("半选中状态:OK");
break;
}
}
(4)结果演示
005 Command Link Button (命令链接按钮)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QCommandLinkButton>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明一个QCommandLinkButton对象
QCommandLinkButton *clb;
private slots:
//声明槽函数,使用鼠标点击clb后触发
void clbClicked();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
//点击QCommandLinkButton会打开网址,所以需要引入以下两个头文件
#include <QDesktopServices> //引入桌面服务
#include <QUrl> //引入URL
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口运行位置
this ->setGeometry(400,300,500,300);
this ->setStyleSheet("QMainWindow{background-color:rgba(85,85,54,100%);}");
clb = new QCommandLinkButton("testclb","clicked testclb",this);
clb ->setGeometry(50,100,250,60);
connect(clb,SIGNAL(clicked()),this,SLOT(clbClicked()));
}
MainWindow::~MainWindow()
{
}
void MainWindow::clbClicked()
{
//调用系统服务打开操作
QDesktopServices::openUrl(QUrl("https://mp.youkuaiyun.com"));
}
(4)结果演示
006 Dialog Button Box(按钮盒)
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QDialogButtonBox>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
//声明两个对象
QDialogButtonBox *dbb;
QPushButton *pb;
private slots:
//声明槽函数
void dbbpbClicked(QAbstractButton *);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//设置窗口运行位置
this ->setGeometry(0,0,500,300);
dbb = new QDialogButtonBox(this);
dbb -> setGeometry(150,150,200,30);
dbb ->addButton(QDialogButtonBox::Cancel);
dbb ->button(QDialogButtonBox::Cancel)->setText("取消");
pb = new QPushButton("自定义");
//将pb添加到dbb中,并设定ButtonRole为ActionRole
dbb ->addButton(pb,QDialogButtonBox::ActionRole);
connect(dbb,SIGNAL(clicked(QAbstractButton*)),this,SLOT(dbbpbClicked(QAbstractButton*)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::dbbpbClicked(QAbstractButton *bt)
{
if(bt == dbb ->button(QDialogButtonBox::Cancel))
{
qDebug()<<"你已经点击【取消】按钮"<<Qt::endl;
}
else if(bt==pb)
{
qDebug()<<"你已经点击【自定义】按钮"<<Qt::endl;
}
}
(4)结果演示
03 控件详解:Containers
Group Box | 组合框:提供带有标题的组合框架 |
Scroll Area | 滚动区域 |
Tool Box | 工具箱 |
Table Widget | 标签小部件 |
Stacked Widget | 堆叠部件 |
Frame | 框架 |
Widget | 小部件 |
MdiArea | MDI区域 |
Dock Widget | 停靠窗体部件 |
QAxWidget | 封装Flash的ActiveX控件 |
001 Group Box(组合框)
案例:
(1)创建Widget新项目
(2)修改"widget.cpp"文件
#include "widget.h"
#include <QGroupBox>
#include <QRadioButton>
#include <QPushButton>
#include <QCheckBox>
#include <QVBoxLayout> //可以在水平方向和垂直方向进行排列的控件,QHBoxLayout/QVBoxLayout所继承
#include <QGridLayout>
#include <QMenu> //增加菜单操作
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//组合框1:gpb_1
QGroupBox *gpb_1 = new QGroupBox("互相排斥单选按钮组1"); //创建一个组合框
QRadioButton *rtbn_1 = new QRadioButton("RadioButton1"); //创建单选按钮
QRadioButton *rtbn_2 = new QRadioButton("RadioButton2");
QRadioButton *rtbn_3 = new QRadioButton("RadioButton3");
QVBoxLayout *vbly1 = new QVBoxLayout; //创建一个竖直排列布局
vbly1 -> addWidget(rtbn_1); //将单选按钮添加到竖直排列布局中
vbly1 -> addWidget(rtbn_2);
vbly1 -> addWidget(rtbn_3);
gpb_1 ->setLayout(vbly1); //设置组合框内部竖直布局排列
//组合框2:gpb_2
QGroupBox *gpb_2 = new QGroupBox("复选按钮2");
QCheckBox *cbx1 = new QCheckBox("checkbox1");
QCheckBox *cbx2 = new QCheckBox("checkbox2");
QCheckBox *cbx3 = new QCheckBox("checkbox3");
cbx2 -> setTristate(true); //设置复选框是否支持半选状态,默认不支持半选状态
cbx2 -> setChecked(true); //设置复选框初始状态为选中状态
QVBoxLayout *vbly2 = new QVBoxLayout; //创建一个竖直排列布局
vbly2 -> addWidget(cbx1); //将复选按钮添加到竖直排列布局中
vbly2 -> addWidget(cbx2);
vbly2 -> addWidget(cbx3);
gpb_2 ->setLayout(vbly2); //设置组合框内部竖直布局排列
//组合框3:gpb_3
QGroupBox *gpb_3 = new QGroupBox("单/复选按钮组3"); //创建一个组合框
gpb_3 -> setCheckable(true); //设置组合框标题为可选状态,取消可选状态后,组合框中所有内容均不可用
gpb_3 -> setChecked(true);
QRadioButton *rtbn_31 = new QRadioButton("RadioButton31"); //创建单选按钮
QRadioButton *rtbn_32 = new QRadioButton("RadioButton32");
QRadioButton *rtbn_33 = new QRadioButton("RadioButton33");
QCheckBox *cbx4 = new QCheckBox("checkbox4");
QVBoxLayout *vbly3 = new QVBoxLayout;
vbly3 -> addWidget(rtbn_31);
vbly3 -> addWidget(rtbn_32);
vbly3 -> addWidget(rtbn_33);
vbly3 -> addWidget(cbx4);
gpb_3 ->setLayout(vbly3);
cbx4 -> setChecked(true);
//组合框4:gpb_4
QGroupBox *gpb_4 = new QGroupBox("综合按钮组4");
gpb_4 -> setCheckable(true);
gpb_4 -> setChecked(true);
QPushButton *pn_4 = new QPushButton("PushButton4");
QPushButton *pn_5 = new QPushButton("PushButton5");
QPushButton *pn_6 = new QPushButton("PushButton6");
//命令按钮添加子菜单,点击按钮后会显示该按钮下包含的可选命令
QMenu *mu= new QMenu(this);
mu -> addAction("King");
mu -> addAction("Drren");
mu -> addAction("Mark");
mu -> addAction("Vico");
pn_6 ->setMenu(mu);
QVBoxLayout *vbly4 = new QVBoxLayout;
vbly4 -> addWidget(pn_4);
vbly4 -> addWidget(pn_5);
vbly4 -> addWidget(pn_6);
gpb_4 ->setLayout(vbly4);
QGridLayout *gdlayout = new QGridLayout; //创建一个栅格布局
gdlayout -> addWidget(gpb_1,0,0,1,1); //将组合框添加到栅格布局0行0列位置
gdlayout -> addWidget(gpb_2,0,1,1,1);
gdlayout -> addWidget(gpb_3,1,0,1,1);
gdlayout -> addWidget(gpb_4,1,1,1,1);
this -> setLayout(gdlayout);
}
Widget::~Widget()
{
}
(4)结果演示
002 Scroll Area(滚动区域)
案例:
(1)创建Widget新项目
(2)添加资源文件
3)修改"main.cpp"文件
#include "widget.h"
#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QGridLayout>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(300,200);
/*
QScrollArea当中有很多功能继承来自于QAbstractScrollArea
滚动条外观是否漂亮取决于当前滚动条策略
*/
QLabel *qljpg = new QLabel;
qljpg ->setScaledContents(true); //让添加进来的图片能够自适应缩放到QLabel标签大小
QImage imagejpg(":/new/prefix1/images/1.jpg"); //导入图片
qljpg -> setPixmap(QPixmap::fromImage(imagejpg)); //将图片添加进QLabel标签中
QScrollArea *sArea = new QScrollArea; //创建一个滚动区域
//根据窗口比例显示,设置后,缩放窗口时整个滚动区域会随着窗口缩放改变大小
sArea ->setWidgetResizable(true);
sArea ->setAlignment(Qt::AlignCenter); //设置滚动区域在窗口中剧中对齐
sArea -> setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); //设置滚动区域能够水平滚动
sArea -> setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //设置滚动区域不能够竖直滚动
sArea -> setWidget(qljpg); //将图片添加进滚动区域
QGridLayout *glayout = new QGridLayout; //新建一个栅格布局
glayout -> addWidget(sArea); //在布局中添加滚动区域
w.setLayout(glayout); //设置窗口布局
w.show();
return a.exec();
}
(4)结果演示
003 Tab Widget(标签小部件)
案例:
(1)创建Widget新项目
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTabWidget>
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
QTabWidget *tabWidgetUI;
private slots:
void MsgCommit();
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
this ->setWindowTitle("标签小部件控件测试");
this ->setGeometry(300,200,600,400);
tabWidgetUI = new QTabWidget(this);
tabWidgetUI -> setGeometry(20,20,560,360);
tabWidgetUI ->show();
bool m_showtabwidgetui1 = true;
bool m_showtabwidgetui2 = true;
bool m_showtabwidgetui3 = true;
bool m_showtabwidgetui4 = true;
if(m_showtabwidgetui1)
{
QWidget *qwidget1 = new QWidget();
tabWidgetUI -> addTab(qwidget1,"进程");
QGridLayout *glayout = new QGridLayout();
QLabel *lab1 = new QLabel("请选择文件及文件夹:");
QLineEdit *ledit1 = new QLineEdit();
QPushButton *pbt1 = new QPushButton("消息框...");
connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(MsgCommit()));
glayout -> addWidget(lab1,0,0);
glayout ->addWidget(ledit1,0,1);
glayout ->addWidget(pbt1,0,2);
qwidget1 ->setLayout(glayout);
}
if(m_showtabwidgetui2)
{
QWidget *qwidget2 = new QWidget();
tabWidgetUI -> addTab(qwidget2,"性能");
}
if(m_showtabwidgetui3)
{
QWidget *qwidget3 = new QWidget();
tabWidgetUI -> addTab(qwidget3,"应用历史记录");
}
if(m_showtabwidgetui4)
{
QWidget *qwidget4 = new QWidget();
tabWidgetUI -> addTab(qwidget4,"启动");
}
}
Widget::~Widget()
{
}
void Widget::MsgCommit()
{
QMessageBox::information(NULL,"testing","QMessageBox:命令按钮测试成功!",QMessageBox::Ok);
}
(4)结果演示
004 Frame(框架)
案例:
(1)创建Widget新项目(带UI)
(2)编辑UI文件并运行
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
#include <QFrame>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("Frame框架控件测试");
ui->frame_1->setStyleSheet("background-color:yellow"); //设置frame1框架背景颜色
ui->frame_2->setStyleSheet("background-color:green");
ui->frame_1->setLineWidth(2); //设置frame1边线宽度
ui->frame_1->setMidLineWidth(2);
ui->frame_1->setFrameShape(QFrame::Box); //设置边框形状
ui->frame_1->setFrameShadow(QFrame::Raised); //设置边框形状
ui->frame_2->setLineWidth(2); //设置frame2边线宽度
ui->frame_2->setMidLineWidth(4);
ui->frame_2->setFrameShape(QFrame::Box); //设置边框形状
ui->frame_2->setFrameShadow(QFrame::Sunken); //设置边框阴影样式
}
Widget::~Widget()
{
delete ui;
}
(4)结果演示
005 Dock Widget(停靠窗口部件/浮动窗口)
注:Qt6中,QPalette::BackGround已经废除,使用QPalette::Window代替
案例:
(1)创建MainWindowt新项目
(2)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QLabel>
#include <QComboBox>
#include <QGridLayout>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDockWidget *dw = new QDockWidget("停靠窗口部件测试:Dock Widget -->Vico",this);
//设置颜色
QPalette pal;
//pal.setColor(QPalette::BackGround,Qt::cyan); //Qt6中,QPalette::BackGround已经废除,使用QPalette::Window代替
pal.setColor(QPalette::Window,Qt::cyan); //设置青色
dw -> setAutoFillBackground(true); //设置全部填充背景颜色
dw -> setPalette(pal); //将浮动窗口颜色设置为青色
//学历层次
QLabel *lab = new QLabel("学历层次");
QComboBox *cbx = new QComboBox();
cbx->addItem("小学");
cbx->addItem("初中");
cbx->addItem("高中");
cbx->addItem("专科");
cbx->addItem("本科");
cbx->addItem("硕士研究生");
cbx->addItem("博士研究生");
QPushButton *pbt1 = new QPushButton("清华大学");
QPushButton *pbt2 = new QPushButton("北京大学");
//通过栅格布局
QGridLayout *glayout = new QGridLayout();
glayout -> addWidget(lab,0,0,1,1);
glayout -> addWidget(cbx,0,1,1,1);
glayout -> addWidget(pbt1,1,0,1,1);
glayout -> addWidget(pbt2,1,1,1,1);
glayout -> setHorizontalSpacing(10);
glayout -> setVerticalSpacing(10);
QWidget *wgt = new QWidget();
wgt -> setLayout(glayout);
dw -> setWidget(wgt);
dw ->setMaximumSize(300,300); //设置浮动窗口大小
}
MainWindow::~MainWindow()
{
delete ui;
}
(4)结果演示
04 控件详解:Item Views(Qt项目视图)
List View | 清单视图 |
Tree View | 树视图 |
Table View | 树视图 |
Column View | 列视图 |
Undo View | 撤销命令视图 |
001 List View(停靠窗口部件/浮动窗口)
案例:
(1)创建Widget新项目(带UI文件)
直接在UI文件中修改窗口标题为"ListView(清单视图)"。
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QListView>
#include <QStringListModel> //字符串列表模型头文件
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
private:
QListView *listview1;
private slots:
void SlotClickedFunc(const QModelIndex &index);
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
resize(450,250);
listview1 = new QListView(this); //创建QListView对象
listview1->setGeometry(20,20,240,160); //设置控件显示位置及大小
QStringList qlist; //创建数据显示清单视图
qlist.append("运动类:篮球、足球");
qlist.append("娱乐类:看电影、写小说、听音乐");
qlist.append("游戏类:五子棋、扑克牌、中国象棋");
qlist.append("旅游类:国内旅游、国外旅游");
//使用数据列表创建数据显示模型进行实现
QStringListModel *listmode = new QStringListModel(qlist);
listview1 ->setModel(listmode);
connect(listview1,SIGNAL(clicked(const QModelIndex)),this,SLOT(SlotClickedFunc(const QModelIndex)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::SlotClickedFunc(const QModelIndex &index)
{
QMessageBox::information(NULL,"兴趣爱好","你选择的类型为:\n"+index.data().toString());
}
(4)结果演示
002 Tree View(树视图)
案例:
(1)创建mainwindow新项目(带ui文件)
直接在ui文件中放入一个Tree View控件
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStandardItemModel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
public:
void InitTreeViewFunc(); //初始化树控件视图
QStandardItemModel *sItemMode;
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
InitTreeViewFunc(); //在构造函数调用树视图控件
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitTreeViewFunc()
{
//1:构造model
sItemMode = new QStandardItemModel(ui -> treeView);
sItemMode -> setHorizontalHeaderLabels(QStringList()<<QStringLiteral("编号")<<QStringLiteral("初中部/高中部"));
//创建一级节点,将它加入到sItemModel;
QList<QStandardItem*> item11;
QStandardItem *item1 = new QStandardItem(QString::number(1));
QStandardItem *item2 = new QStandardItem("初中部");
item11.append(item1);
item11.append(item2);
sItemMode ->appendRow(item11);
//二级节点,添加到第一个一级节点
QList<QStandardItem*> item112;
QStandardItem *item1121 = new QStandardItem(QString::number(2));
QStandardItem *item1122 = new QStandardItem("一年级");
item112.append(item1121);
item112.append(item1122);
item1->appendRow(item112);
//三级节点,添加到一级节点的二级节点下
QList<QStandardItem*> item1231;
QStandardItem *item12311 = new QStandardItem(QString::number(3));
QStandardItem *item12312 = new QStandardItem("一班");
item1231.append(item12311);
item1231.append(item12312);
item1121->appendRow(item1231);
QList<QStandardItem*> item1232;
QStandardItem *item12321 = new QStandardItem(QString::number(3));
QStandardItem *item12322 = new QStandardItem("二班");
item1232.append(item12321);
item1232.append(item12322);
item1121->appendRow(item1232);
QList<QStandardItem*> item12;
QStandardItem *item3 = new QStandardItem(QString::number(2));
QStandardItem *item4 = new QStandardItem("高中部");
item12.append(item3);
item12.append(item4);
sItemMode ->appendRow(item12);
//2:给QTreeView应用model
ui ->treeView ->setModel(sItemMode);
}
(4)结果演示
003 Table View(表视图)
案例:
(1)创建mainwindow新项目(带ui文件)
直接在ui文件中放入一个Table View控件
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
private:
void InitTableViewFunc();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("TableView(表视图控件)");
InitTableViewFunc(); //调用自定义函数进行初始化
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::InitTableViewFunc()
{
//1:添加表头,准备数据模型
QStandardItemModel *stuMode = new QStandardItemModel();
stuMode ->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("学号")));
stuMode ->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("姓名")));
stuMode ->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("性别")));
stuMode ->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("分数")));
//通过API函数将数据模型绑定到QTableView
ui->tableView->setModel(stuMode);
//设置表格列的宽度
ui ->tableView->setColumnWidth(0,120);
//2:添加数据信息
stuMode -> setItem(0,0,new QStandardItem("20240601"));
stuMode -> setItem(0,1,new QStandardItem("小明"));
stuMode -> setItem(0,2,new QStandardItem("男"));
stuMode -> setItem(0,3,new QStandardItem("656"));
stuMode ->item(0,0)->setTextAlignment(Qt::AlignCenter); //设置数据居中对齐
stuMode ->item(0,1)->setTextAlignment(Qt::AlignCenter);
stuMode ->item(0,2)->setTextAlignment(Qt::AlignCenter);
stuMode ->item(0,3)->setTextAlignment(Qt::AlignCenter);
stuMode -> setItem(1,0,new QStandardItem("20240602"));
stuMode -> setItem(1,1,new QStandardItem("小红"));
stuMode -> setItem(1,2,new QStandardItem("女"));
stuMode -> setItem(1,3,new QStandardItem("689"));
stuMode ->item(1,0)->setTextAlignment(Qt::AlignCenter);
stuMode ->item(1,1)->setTextAlignment(Qt::AlignCenter);
stuMode ->item(1,2)->setTextAlignment(Qt::AlignCenter);
stuMode ->item(1,3)->setTextAlignment(Qt::AlignCenter);
ui ->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格中显示的内容不可编辑
stuMode->sort(3,Qt::DescendingOrder); //设置表格数据根据分数排序
}
(4)结果演示
05 控件详解:Item Widgets(Qt项目部件)
List Widget | 清单控件 |
Tree Widget | 树形控件 |
Table Widget | 表控件 |
001 List Widget(清单控件)
案例:
(1)创建Widget新项目(带UI文件)
直接在UI文件中修改窗口标题为"ListWidget(清单控件)",并在窗口中添加List Widget控件。
(2)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QListWidgetItem *qitem = new QListWidgetItem("将进酒--作者:李白"); //设置ListWidget标题
ui->listWidget->addItem(qitem);
qitem -> setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); //设置ListWidget标题居中对齐
QStringList slist;
slist<<"1:君不见,黄河之水天上来,奔流到海不复回。";
slist<<"2:君不见,高堂明镜悲白发,朝如青丝暮成雪。";
slist<<"3:人生得意须尽欢,莫使金樽空对月。";
slist<<"4:天生我材必有用,千金散尽还复来。";
slist<<"5:烹羊宰牛且为乐,会须一饮三百杯。";
slist<<"6:岑夫子,丹丘生,将进酒,杯莫停。";
slist<<"7:与君歌一曲,请君为我倾耳听。";
slist<<"8:钟鼓馔玉不足贵,但愿长醉不愿醒。";
slist<<"9:古来圣贤皆寂寞,惟有饮者留其名。";
slist<<"10:陈王昔时宴平乐,斗酒十千恣欢谑。";
slist<<"11:主人何为言少钱,径须沽取对君酌。";
slist<<"12:五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。";
ui ->listWidget->addItems(slist);
}
Widget::~Widget()
{
delete ui;
}
(3)结果演示
002 Tree Widget(树形控件)
案例:
(1)创建Widget新项目(带UI文件)
直接在UI文件中修改窗口标题为"TreeWidget测试控件",并在窗口中添加Tree Widget控件。
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTreeWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1.添加一级节点
QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui->treeWidget);
topItem1 -> setText(0,"清华大学");
topItem1 -> setCheckState(0,Qt::Checked); //显示一级节点前的复选框
ui->treeWidget->addTopLevelItem(topItem1);
//TreeWidget控件会默认由一个表头,执行以下操作隐藏表头
ui->treeWidget->setHeaderHidden(true);
//设置TreeWidget默认处于展开模式
ui->treeWidget->expandAll();
//2:将二级节点节点添加到一级节点的topItem1
QTreeWidgetItem *topItem11 = new QTreeWidgetItem(topItem1);
topItem11 -> setText(0,"建筑学院");
topItem11 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem12 = new QTreeWidgetItem(topItem1);
topItem12 -> setText(0,"土木学院");
topItem12 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem13 = new QTreeWidgetItem(topItem1);
topItem13 -> setText(0,"信息科学技术学院");
topItem13 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem14 = new QTreeWidgetItem(topItem1);
topItem14 -> setText(0,"马克思主义学院");
topItem14 -> setCheckState(0,Qt::Checked);
//3.添加一级节点
QTreeWidgetItem *topItem2 = new QTreeWidgetItem(ui->treeWidget);
topItem2 -> setText(0,"北京大学");
topItem2 -> setCheckState(0,Qt::Checked); //显示一级节点前的复选框
ui->treeWidget->addTopLevelItem(topItem2);
QTreeWidgetItem *topItem21 = new QTreeWidgetItem(topItem2);
topItem21 -> setText(0,"数学科学学院");
topItem21 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem22 = new QTreeWidgetItem(topItem2);
topItem22 -> setText(0,"电子科学与技术学院");
topItem22 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem23 = new QTreeWidgetItem(topItem2);
topItem23 -> setText(0,"通信工程学院");
topItem23 -> setCheckState(0,Qt::Checked);
QTreeWidgetItem *topItem24 = new QTreeWidgetItem(topItem2);
topItem24 -> setText(0,"马克思主义学院");
topItem24 -> setCheckState(0,Qt::Checked);
}
Widget::~Widget()
{
delete ui;
}
(4)结果演示
003 Table Widget(表控件)
案例:
(1)创建Widget新项目(带UI文件)
直接在UI文件中修改窗口标题为"TableWidget测试控件",并在窗口中添加Table Widget。
(2)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置表格行数和列数2行2列
ui -> tableWidget ->setRowCount(3);
ui -> tableWidget ->setColumnCount(2);
//设置水平对齐
QStringList slist;
slist<<"学号"<<"分数";
ui->tableWidget->setHorizontalHeaderLabels(slist);
QList<QString>strno;
strno<<"202201"<<"202202"<<"202203";
QList<QString>strscore;
strscore<<"708"<<"712"<<"690";
//通过循环为表格赋值
for(int i=0;i<3;i++)
{
int icol = 0;
QTableWidgetItem *pitem = new QTableWidgetItem(strno.at(i));
ui->tableWidget->setItem(i,icol++,pitem);
ui->tableWidget->setItem(i,icol,new QTableWidgetItem(strscore.at(i)));
}
}
Widget::~Widget()
{
delete ui;
}
(3)结果演示
06 控件详解:Input Widgets
Combo Box | 编辑组合框 |
Font Combo Box | 字体组合框 |
Line Edit | 行编辑框 |
Text Edit | 文本编辑框 |
Plain Text Edit | 多行文本编辑器 |
Spin Box | 整数旋转框 |
Double Spin Box | 小数旋转框 |
Time Edit | 时间编辑 |
Date Edit | 日期编辑 |
Date/Time Edit | 日期时间编辑 |
Dial | 表盘控件 |
Horizontal Scroll Bar | 水平滚动条 |
Vertical Scroll Bar | 垂直滚动条 |
Horizontal Slider | 水平滑动条 |
Vertical Slider | 垂直滑动条 |
Key Sequence Edit | 快捷键输入控件 |
001 Combobox Box(编辑组合框)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//1:Combo Box控件
#include<QComboBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//1:声明一个QComboBox对象
QComboBox *combobox;
private slots:
void comboboxIndex(int);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this -> setWindowTitle("Input所有控件测试"); //设置主窗口标题
//设置主窗口的显示位置及大小
this->setGeometry(300,200,1000,600);
//1:
combobox = new QComboBox(this); //在主窗口中实例化编辑组合框
combobox ->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("天津市");
combobox->addItem("重庆市");
combobox->addItem("湖南省");
combobox->addItem("江西省");
combobox->addItem("黑龙江省");
combobox->addItem("浙江省");
//信号槽函数连接实现
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::comboboxIndex(int index)
{
qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox -> itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
(4)结果演示
002 Font Combo Box(字体组合框)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//1:Combo Box控件
#include<QComboBox>
//2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//1:声明一个QComboBox对象
private:
QComboBox *combobox;
private slots:
void comboboxIndex(int);
//2:声明一个QFontComboBox对象
private:
QFontComboBox *fontcombobox;
QLabel *qlabels;
private slots:
void fontcomboboxFunc(QFont);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this -> setWindowTitle("Input所有控件测试"); //设置主窗口标题
//设置主窗口的显示位置及大小
this->setGeometry(300,200,1000,600);
//1:QComboBox
combobox = new QComboBox(this); //在主窗口中实例化编辑组合框
combobox ->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("天津市");
combobox->addItem("重庆市");
combobox->addItem("湖南省");
combobox->addItem("江西省");
combobox->addItem("黑龙江省");
combobox->addItem("浙江省");
//信号槽函数连接实现
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
//2:QFontComboBox
fontcombobox = new QFontComboBox(this);
qlabels = new QLabel(this);
fontcombobox->setGeometry(10,50,200,30);
qlabels -> setGeometry(10,90,300,50);
//信号与槽函数连接实现
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::comboboxIndex(int index)
{
qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox -> itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
void MainWindow::fontcomboboxFunc(QFont font)
{ QString qStr = "Qt开发工程师";
qlabels -> setText(qStr);
qlabels ->setFont(font); //将qlabel标签中的文本字体样式设置为fontcombobox选中的样式
}
(4)结果演示
003 Line Edit(行编辑框)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//1:Combo Box控件
#include<QComboBox>
//2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>
//3:Line Edit控件
#include <QLineEdit>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//1:声明一个QComboBox对象
private:
QComboBox *combobox;
private slots:
void comboboxIndex(int);
//2:声明一个QFontComboBox对象
private:
QFontComboBox *fontcombobox;
QLabel *qlabels;
private slots:
void fontcomboboxFunc(QFont);
//3:声明一个QLineEdit/QPushButton/QLabel对象
private:
QLineEdit *lineedit;
QPushButton *pushbutton;
QLabel *qlabely;
private slots:
void pushbuttonclicked();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this -> setWindowTitle("Input所有控件测试"); //设置主窗口标题
//设置主窗口的显示位置及大小
this->setGeometry(300,200,1000,600);
//1:QComboBox
combobox = new QComboBox(this); //在主窗口中实例化编辑组合框
combobox ->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("天津市");
combobox->addItem("重庆市");
combobox->addItem("湖南省");
combobox->addItem("江西省");
combobox->addItem("黑龙江省");
combobox->addItem("浙江省");
//信号槽函数连接实现
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
//2:QFontComboBox
fontcombobox = new QFontComboBox(this);
qlabels = new QLabel(this);
fontcombobox->setGeometry(10,50,200,30);
qlabels -> setGeometry(10,90,300,50);
//信号与槽函数连接实现
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
//3:Line Edit
lineedit = new QLineEdit(this);
lineedit -> setGeometry(10,150,200,30);
pushbutton = new QPushButton(this);
pushbutton ->setGeometry(220,150,100,30);
pushbutton ->setText("点击我");
qlabely = new QLabel(this);
qlabely -> setGeometry(10,200,400,30);
qlabely->setText("你输入的内容为:");
//信号与槽函数连接
connect(pushbutton,SIGNAL(clicked(bool)),this,SLOT(pushbuttonclicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
//1:
void MainWindow::comboboxIndex(int index)
{
qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox -> itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
//2:
void MainWindow::fontcomboboxFunc(QFont font)
{ QString qStr = "Qt开发工程师";
qlabels -> setText(qStr);
qlabels ->setFont(font); //将qlabel标签中的文本字体样式设置为fontcombobox选中的样式
}
//3:
void MainWindow::pushbuttonclicked()
{
QString qstr;
qstr = "你输入的内容为:";
qstr = qstr + lineedit->text();
qlabely->setText(qstr);
lineedit ->clear(); //清除Line Edit里面的文本
}
(4)结果演示
004 Plain Text Edit(多行文本编辑器)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//1:Combo Box控件
#include<QComboBox>
//2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>
//3:Line Edit控件
#include <QLineEdit>
#include <QPushButton>
//4:Plain Text Edit控件
#include <QPlainTextEdit>
#include <QRadioButton>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//1:声明一个QComboBox对象
private:
QComboBox *combobox;
private slots:
void comboboxIndex(int);
//2:声明一个QFontComboBox对象
private:
QFontComboBox *fontcombobox;
QLabel *qlabels;
private slots:
void fontcomboboxFunc(QFont);
//3:声明一个QLineEdit/QPushButton/QLabel对象
private:
QLineEdit *lineedit;
QPushButton *pushbutton;
QLabel *qlabely;
private slots:
void pushbuttonclicked();
//4:声明QPlainTextEdit和QRadioButton对象
private:
QPlainTextEdit *plaintedit;
QRadioButton *radiobutton;
private slots:
void radioButtonClicked();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
#include <QDir>
#include <QTextStream>
#include <QCoreApplication>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this -> setWindowTitle("Input所有控件测试"); //设置主窗口标题
//设置主窗口的显示位置及大小
this->setGeometry(300,200,1000,600);
//1:QComboBox
combobox = new QComboBox(this); //在主窗口中实例化编辑组合框
combobox ->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("天津市");
combobox->addItem("重庆市");
combobox->addItem("湖南省");
combobox->addItem("江西省");
combobox->addItem("黑龙江省");
combobox->addItem("浙江省");
//信号槽函数连接实现
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
//2:QFontComboBox
fontcombobox = new QFontComboBox(this);
qlabels = new QLabel(this);
fontcombobox->setGeometry(10,50,200,30);
qlabels -> setGeometry(10,90,300,50);
//信号与槽函数连接实现
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
//3:Line Edit
lineedit = new QLineEdit(this);
lineedit -> setGeometry(10,150,200,30);
pushbutton = new QPushButton(this);
pushbutton ->setGeometry(220,150,100,30);
pushbutton ->setText("点击我");
qlabely = new QLabel(this);
qlabely -> setGeometry(10,200,400,30);
qlabely->setText("你输入的内容为:");
//信号与槽函数连接
connect(pushbutton,SIGNAL(clicked(bool)),this,SLOT(pushbuttonclicked()));
//4:
plaintedit = new QPlainTextEdit(this);
plaintedit->setGeometry(10,240,400,200);
radiobutton = new QRadioButton(this);
radiobutton ->setGeometry(300,220,200,30);
radiobutton ->setText("只读模式");
//设置工作目录为可执行程序的工作目录
QDir::setCurrent(QCoreApplication::applicationDirPath());
QFile fe("moc_mainwindow.cpp"); //如果这个文件不在这个目录下,返回上一级目录
fe.open((QFile::ReadOnly|QFile::Text));
//加载文件流
QTextStream strin(&fe);
plaintedit ->insertPlainText(strin.readAll());
//信号与槽函数连接,将加载进来的文本内容在多行文本编辑框中设置为只读
connect(radiobutton,SIGNAL(clicked(bool)),this,SLOT(radioButtonClicked()));
}
MainWindow::~MainWindow()
{
delete ui;
}
//1:
void MainWindow::comboboxIndex(int index)
{
qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox -> itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
//2:
void MainWindow::fontcomboboxFunc(QFont font)
{ QString qStr = "Qt开发工程师";
qlabels -> setText(qStr);
qlabels ->setFont(font); //将qlabel标签中的文本字体样式设置为fontcombobox选中的样式
}
//3:
void MainWindow::pushbuttonclicked()
{
QString qstr;
qstr = "你输入的内容为:";
qstr = qstr + lineedit->text();
qlabely->setText(qstr);
lineedit ->clear(); //清除Line Edit里面的文本
}
//4:
void MainWindow::radioButtonClicked()
{
if(radiobutton->isChecked())
{
plaintedit->setReadOnly(true); //如果单选框被选中,多行文本框plainedit设置为只读
}
else
plaintedit->setReadOnly(false);
}
(4)结果演示
005 Spin Box(整数旋转框)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//1:Combo Box控件
#include<QComboBox>
//2:FontComboBox控件
#include <QFontComboBox>
#include <QLabel>
//3:Line Edit控件
#include <QLineEdit>
#include <QPushButton>
//4:Plain Text Edit控件
#include <QPlainTextEdit>
#include <QRadioButton>
//5:Spin Box控件
#include <QSpinBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//1:声明一个QComboBox对象
private:
QComboBox *combobox;
private slots:
void comboboxIndex(int);
//2:声明一个QFontComboBox对象
private:
QFontComboBox *fontcombobox;
QLabel *qlabels;
private slots:
void fontcomboboxFunc(QFont);
//3:声明一个QLineEdit/QPushButton/QLabel对象
private:
QLineEdit *lineedit;
QPushButton *pushbutton;
QLabel *qlabely;
private slots:
void pushbuttonclicked();
//4:声明QPlainTextEdit和QRadioButton对象
private:
QPlainTextEdit *plaintedit;
QRadioButton *radiobutton;
private slots:
void radioButtonClicked();
//5:声明QPlainTextEdit/QRadioButton对象
private:
QSpinBox *spinbox;
private slots:
void spinboxValueChanged(int x);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
#include <QDir>
#include <QTextStream>
#include <QCoreApplication>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this -> setWindowTitle("Input所有控件测试"); //设置主窗口标题
//设置主窗口的显示位置及大小
this->setGeometry(300,200,1000,600);
//1:QComboBox
combobox = new QComboBox(this); //在主窗口中实例化编辑组合框
combobox ->setGeometry(10,10,200,30);
combobox->addItem("北京市");
combobox->addItem("上海市");
combobox->addItem("天津市");
combobox->addItem("重庆市");
combobox->addItem("湖南省");
combobox->addItem("江西省");
combobox->addItem("黑龙江省");
combobox->addItem("浙江省");
//信号槽函数连接实现
connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
//2:QFontComboBox
fontcombobox = new QFontComboBox(this);
qlabels = new QLabel(this);
fontcombobox->setGeometry(10,50,200,30);
qlabels -> setGeometry(10,90,300,50);
//信号与槽函数连接实现
connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
//3:Line Edit
lineedit = new QLineEdit(this);
lineedit -> setGeometry(10,150,200,30);
pushbutton = new QPushButton(this);
pushbutton ->setGeometry(220,150,100,30);
pushbutton ->setText("点击我");
qlabely = new QLabel(this);
qlabely -> setGeometry(10,200,400,30);
qlabely->setText("你输入的内容为:");
//信号与槽函数连接
connect(pushbutton,SIGNAL(clicked(bool)),this,SLOT(pushbuttonclicked()));
//4:
plaintedit = new QPlainTextEdit(this);
plaintedit->setGeometry(10,240,400,200);
radiobutton = new QRadioButton(this);
radiobutton ->setGeometry(300,220,200,30);
radiobutton ->setText("只读模式");
//设置工作目录为可执行程序的工作目录
QDir::setCurrent(QCoreApplication::applicationDirPath());
QFile fe("moc_mainwindow.cpp"); //如果这个文件不在这个目录下,返回上一级目录
fe.open((QFile::ReadOnly|QFile::Text));
//加载文件流
QTextStream strin(&fe);
plaintedit ->insertPlainText(strin.readAll());
//信号与槽函数连接,将加载进来的文本内容在多行文本编辑框中设置为只读
connect(radiobutton,SIGNAL(clicked(bool)),this,SLOT(radioButtonClicked()));
//5:改变窗口背景颜色
this ->setStyleSheet("QMainWindow{background-color:""rgba(100,200,100,100%)}");
spinbox=new QSpinBox(this);
spinbox->setGeometry(440,250,150,30);
spinbox->setRange(0,100); //设置整数旋转框的范围
spinbox->setSingleStep(10); //设置步长
spinbox->setValue(100); //设置初始化值
spinbox->setSuffix("%不透明度"); //设置整数旋转框后缀
//信号与槽函数连接
connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
//1:
void MainWindow::comboboxIndex(int index)
{
qDebug()<<"你选择的区别是:"<<combobox->itemText(index)<<Qt::endl;
QMessageBox mybox(QMessageBox::Question,"信息",combobox -> itemText(index),QMessageBox::Yes|QMessageBox::No);
mybox.exec();
}
//2:
void MainWindow::fontcomboboxFunc(QFont font)
{ QString qStr = "Qt开发工程师";
qlabels -> setText(qStr);
qlabels ->setFont(font); //将qlabel标签中的文本字体样式设置为fontcombobox选中的样式
}
//3:
void MainWindow::pushbuttonclicked()
{
QString qstr;
qstr = "你输入的内容为:";
qstr = qstr + lineedit->text();
qlabely->setText(qstr);
lineedit ->clear(); //清除Line Edit里面的文本
}
//4:
void MainWindow::radioButtonClicked()
{
if(radiobutton->isChecked())
{
plaintedit->setReadOnly(true); //如果单选框被选中,多行文本框plainedit设置为只读
}
else
plaintedit->setReadOnly(false);
}
//5:
void MainWindow::spinboxValueChanged(int x)
{
double dx = (double)x/100;
this ->setWindowOpacity(dx); //设置主窗口的透明度
}
(4)结果演示
006 Time Edit、Date Edit、Date/Time Edit(时间控件)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//6:时间控件
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
private:
QDateTimeEdit *dte;
QTimeEdit *te;
QDateEdit *de;
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//6:QDateTimeEdit/QTimeEdit/QDateEdit
dte = new QDateTimeEdit(QDateTime::currentDateTime(),this);
dte->setGeometry(440,290,200,30);
te = new QTimeEdit(QTime::currentTime(),this);
te->setGeometry(440,330,200,30);
de=new QDateEdit(QDate::currentDate(),this);
de->setGeometry(440,370,200,30);
}
MainWindow::~MainWindow()
{
delete ui;
}
(4)结果演示
007 QScrollBar(水平和垂直滚动控件)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//6:时间控件
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>
//7:Scroll Bar控件
#include <QScrollBar>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
private:
QDateTimeEdit *dte;
QTimeEdit *te;
QDateEdit *de;
//7:声明QScrollBar对象
QScrollBar *hscrollbar,*vscrollbar;
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//6:QDateTimeEdit/QTimeEdit/QDateEdit
dte = new QDateTimeEdit(QDateTime::currentDateTime(),this);
dte->setGeometry(440,290,200,30);
te = new QTimeEdit(QTime::currentTime(),this);
te->setGeometry(440,330,200,30);
de=new QDateEdit(QDate::currentDate(),this);
de->setGeometry(440,370,200,30);
//7:QScrollBar滚动条
hscrollbar = new QScrollBar(Qt::Horizontal,this);
hscrollbar->setGeometry(0,500,750,30);
vscrollbar=new QScrollBar(Qt::Vertical,this);
vscrollbar->setGeometry(750,0,30,500);
}
MainWindow::~MainWindow()
{
delete ui;
}
(4)结果演示
008 Key Sequence Edit(快捷键控件)
案例:
(1)创建mainwindow新项目
(2)修改"mainwindow.h"文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//6:时间控件
#include <QTimeEdit>
#include <QDateEdit>
#include <QDateTimeEdit>
//7:Scroll Bar控件
#include <QScrollBar>
//8:Key Sequnence Edit控件
#include <QKeySequenceEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
//6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
private:
QDateTimeEdit *dte;
QTimeEdit *te;
QDateEdit *de;
//7:声明QScrollBar对象
QScrollBar *hscrollbar,*vscrollbar;
//8:声明QKeySequenceEdit对象
private:
QKeySequenceEdit *kse;
private slots:
void keyseqeditChanged(const QKeySequence &key);
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//6:QDateTimeEdit/QTimeEdit/QDateEdit
dte = new QDateTimeEdit(QDateTime::currentDateTime(),this);
dte->setGeometry(440,290,200,30);
te = new QTimeEdit(QTime::currentTime(),this);
te->setGeometry(440,330,200,30);
de=new QDateEdit(QDate::currentDate(),this);
de->setGeometry(440,370,200,30);
//7:QScrollBar滚动条
hscrollbar = new QScrollBar(Qt::Horizontal,this);
hscrollbar->setGeometry(0,500,750,30);
vscrollbar=new QScrollBar(Qt::Vertical,this);
vscrollbar->setGeometry(750,0,30,500);
//8:快捷键实现
kse= new QKeySequenceEdit(this);
kse ->setGeometry(400,530,200,30);
//信号与槽函数连接
connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),this,SLOT(keyseqeditChanged(const QKeySequence &)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyseqeditChanged(const QKeySequence &key)
{
if(key==QKeySequence(tr("Ctrl+Q")))
{
this->close();
}
else
{
qDebug()<<key.toString()<<Qt::endl;
}
}
(4)结果演示
07 控件详解:Distplay Widgets
Label | 标签* |
Text Browser | 文本浏览器* |
Graphics View | 图形视图框架 |
Calender Widget | 日历控件 |
LCD Number | 液晶字体数字控件* |
Progress Bar | 进度条* |
Horizontal Line | 水平线 |
Vertical Line | 垂直线 |
OpenGL Widget | 图形渲染控件 |
QQuickWidget | QML嵌入控件 |
001 Label(标签)
(1)创建widget项目(带ui文件)
在ui文件中添加如下内容,用来显示图片。
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
//1:
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
//1
private:
void textlabelFunc();
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1.调用函数
textlabelFunc();
}
Widget::~Widget()
{
delete ui;
}
void Widget::textlabelFunc()
{
//读取图片路径
QString fName("E:\\File\\Code_Program\\C_C++\\Qt\\Learn\\LingShengQt\\04\\07DIsplayWdiget\\QtDIsplayWdigetProssss\\666.jpg");
QImage *qimg=new QImage;
if(!(qimg->load(fName))) //判断加载图片是否成功
{
QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查路径");
delete qimg;
return;
}
ui->labeljpg->setPixmap(QPixmap::fromImage(*qimg)); //将图片加载进标签里
};
(4)结果演示
002 Text Browser(文本浏览器)
(1)创建widget项目(带ui文件)
在ui文件中添加添加Text Browser控件。
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
//1:
#include <QMessageBox>
//2:
#include <QFile>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
//1
private:
void textlabelFunc();
//2
private:
void textbrowserFuncReadTxt();
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1.调用函数
textlabelFunc();
//2.调用函数
textbrowserFuncReadTxt();
}
Widget::~Widget()
{
delete ui;
}
void Widget::textlabelFunc()
{
//读取图片路径
QString fName("E:\\File\\Code_Program\\C_C++\\Qt\\Learn\\LingShengQt\\04\\07DIsplayWdiget\\QtDIsplayWdigetProssss\\666.jpg");
QImage *qimg=new QImage;
if(!(qimg->load(fName))) //判断加载图片是否成功
{
QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查路径");
delete qimg;
return;
}
ui->labeljpg->setPixmap(QPixmap::fromImage(*qimg)); //将图片加载进标签里
}
void Widget::textbrowserFuncReadTxt()
{
QString qStrdData;
QFile qfile("E:\\File\\Code_Program\\C_C++\\Qt\\Learn\\LingShengQt\\04\\07DIsplayWdiget\\QtDIsplayWdigetProssss\\testfile.txt"); //读取文本文件
if(!qfile.open(QIODevice::ReadOnly|QIODevice::Text)) //如果文件读取不成功
{
QMessageBox::warning(this,"失败","打开文件失败,请重新检查");
}
while(!qfile.atEnd()) //当读取的内容不到最后一行时
{
QByteArray ay = qfile.readLine(); //一行一行读取文本内容
QString strs(ay); //将读取到的内容转换为字符串
qStrdData.append(strs); //将每一行字符串添加到新字符串里
}
ui->textBrowser->setText(qStrdData); //将读取的文本显示到textBrowser中
}
(4)结果演示
003 Progress Bar(进度条)
(1)创建widget项目(带ui文件)
在ui文件中添加添加Progress Bar控件,并给按钮添加clicked槽函数。
(2)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//3.初始化进度条
ui->progressBar->setRange(0,1000000); //设置进度条范围
ui->progressBar->setValue(0); //设置进度条初始状态
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
for(int i=0;i<1000000;i++)
{
for(int j=0;j<1;j++)
{
ui->progressBar->setValue(i);
}
}
}
(3)结果演示
004 LCD Number(LCD数字控件)
(1)创建widget项目(带ui文件)
在ui文件中添加添加LCD BNumberr控件,并给三个按钮依次添加clicked槽函数。
(2)修改"widget.h"文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
//自定义函数:定时器
void on_timerout();
private:
int iValues = 0;
QTimer *timers; //定时器
void InitFunc();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
(3)修改"widget.cpp"文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//初始化
InitFunc();
//信号与槽函数连接
connect(timers,&QTimer::timeout,this,&Widget::on_timerout);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
timers->start(); //1s触发一次操作
ui->pushButton->setEnabled(false);
ui->pushButton_2->setEnabled(true);
ui->pushButton_3->setEnabled(true);
}
void Widget::on_pushButton_2_clicked()
{
timers->stop(); //1s触发一次操作
ui->pushButton->setEnabled(true);
ui->pushButton_2->setEnabled(false);
ui->pushButton_3->setEnabled(true);
}
void Widget::on_pushButton_3_clicked()
{
timers->stop(); //1s触发一次操作
iValues =0;
ui->lcdNumber->display(iValues);
ui->pushButton->setEnabled(true);
ui->pushButton_2->setEnabled(true);
ui->pushButton_3->setEnabled(false);
}
void Widget::on_timerout()
{
iValues++;
ui->lcdNumber->display(iValues);
}
void Widget::InitFunc()
{
timers = new QTimer(this);
timers -> setInterval(1000); //定时周期为1s
timers ->stop();
}
(4)结果演示
推荐课程: