1 对话框窗体
定义:对话框是一种窗体,是一种上浮在底层窗体上的顶层窗体,出现在程序的最上层,用来实现主窗体和用户的短期任务交互。
特点:1 一般用来实现那些只是暂时存在的用户界面
2 对话框窗体是一个独立的窗体,一般有父窗体
3 对话框窗体没有最大化、最小化
常见的对话框窗体:信息对话框 告警对话框 文件对话框 颜色对话框 字体对话框 ...
QT提供了20几个对话框类
创建QT工程时,QT提供了3种基类:
QWidget:是所有窗口部件的基类
QMainWindow:是带有菜单栏 工具栏的主窗体类
QDialog:是各种对话框的基类
1.1文件对话框-->QFileDialog::getOpenfilename
打开文件对话框
getOpenfilename---->得到一个打开文件对话框
参数1:父对象(父组件)Q_NULLPTR
参数2: 对话框的标题
参数3:对话框显示时默认打开的目录"d:/work/2021/21051"
参数4:对话框中文件名后缀的过滤器选项(txt;jpg;mp3;)
参数5:默认的过滤选项(txt)
返回值:用户选中的要打开的文件名(含绝对路径)
#include "dialog.h"
#include <QApplication>
#include <QFileDialog>//文件对话框类
#include <QDebug>//调试类,与cout作用一样
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString filter="Image(*.png;*.jpg);;text files(*.txt);;all files(*.*)";
QString defFilter="text files(*.txt)";
QString filename=QFileDialog::getOpenFileName
(Q_NULLPTR,"打开文件/目录","D:/work/2021/21051",filter,&defFilter);
if(filename.isEmpty())//文件名为空
{
qDebug()<<"open file error!\r\n";
}
else
{
qDebug()<<"open file:"<<filename<<endl;
}
//Dialog w;
//w.show();
return a.exec();
}
保存文件对话框-->getSavefilename()
getSavefilename---->得到一个保存文件对话框
参数1:父对象(父组件)Q_NULLPTR
参数2: 对话框的标题
参数3:对话框显示时默认打开的目录"d:/work/2021"
参数4:对话框中文件名后缀的过滤器选项(txt;jpg;mp3;)
参数5:默认的过滤选项(txt)
返回值:用户选中的要保存的文件名(含绝对路径)
#include "dialog.h"
#include <QApplication>
#include <QFileDialog>//文件对话框
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString filter="Image(*.png;*.jpg);;text files(*.txt);;all files(*.*)";
QString defilter="text files(*.txt)";
QString filename=QFileDialog::getSaveFileName(Q_NULLPTR,"保存文件","D:/work/2021",filter,&defilter);
if(filename.isEmpty())//文件名为空
{
qDebug()<<"Save file error!\r\n";
}
else
{
qDebug()<<"Save file:"<<filename<<endl;
}
//Dialog w;
//w.show();
return a.exec();
}
1.2 字体对话框-->QFontDialog
getFont---->得到一个字体对话框
参数1:用来保存是否点击了确定按钮值
参数2:字体的初始化样式
参数3:父对象,Q_NULLPTR
参数4:字体对话框标题
返回值:已经选择好的字体样式
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
bool ok;
QFont f=ui->label->font();//获取label中的默认字体样式
QFont font=QFontDialog::getFont(&ok,f,Q_NULLPTR,"设置字体");
if(ok)
{
ui->label->setFont(font);//设置label中的字体样式
}
else
{
qDebug()<<"no select any font!\r\n";
}
}
1.3颜色对话框-->QColorDialog
getColor---->得到一个颜色对话框
参数1:颜色对话框的默认颜色值 Qt::white
参数2:父对象,Q_NULLPTR
参数3:颜色对话框的标题
参数4:使用哪种颜色库(Qt提供的标准颜色库或Windows的颜色库)
QColorDialog::DontUserNativeDialog
返回值:用户选中的颜色值
#include "dialog.h"
#include "ui_dialog.h"
#include <QColorDialog>//颜色对话框类
#include <QColor>//颜色类
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
QColor color=QColorDialog::getColor(Qt::red,Q_NULLPTR,"设置颜
色",QColorDialog::DontUseNativeDialog);
ui->textEdit->setTextColor(color);
}
1.4 消息对话框-->QMessageBox
关于对话框
about():得到一个关于对话框(自定义的)
参数1:父对象
参数2:对话框标题
参数3:对话框正文内容
aboutQt():得到一个关于Qt的对话框
参数1:父对象
参数2:对话框标题
信息对话框
information()-->得到一个信息对话框
参数1:父对象
参数2:对话框标题
参数3:对话框文本内容
参数4:传给函数的按钮值
返回值:用户按下的按钮值
告警对话框
warning()----->得到一个告警对话框
参数1:父对象
参数2:对话框标题
参数3:对话框文本内容
参数4:传给函数的按钮值
返回值:用户按下的按钮值
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>//消息对话框类
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setCheckable(true);//按钮每次按下的值是有区别的
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked(bool checked)
{
if(checked)
{
QMessageBox::about(Q_NULLPTR,"关于华清",
"华清远见成立于2004年,全国共有13个分中心");
}
else
{
QMessageBox::aboutQt(Q_NULLPTR,"关于QT");
}
}
void Widget::on_pushButton_2_clicked()
{
int ret=QMessageBox::information(Q_NULLPTR,
"消息提示","现在上课了吗?",QMessageBox::Yes|QMessageBox::No);
if(ret==QMessageBox::Yes)
{
qDebug()<<"you choose yes!\r\n";
}
else
{
qDebug()<<"you choose NO!\r\n";
}
}
void Widget::on_pushButton_3_clicked()
{
int ret=QMessageBox::warning(Q_NULLPTR,
"告警提示","现在正在上课!",QMessageBox::Yes|QMessageBox::Cancel|QMessageBox::No);
if(ret==QMessageBox::Yes)
{
qDebug()<<"you choose yes!\r\n";
}
else
{
qDebug()<<"you choose NO!\r\n";
}
}
void Widget::on_pushButton_4_clicked()
{
int ret=QMessageBox::critical(Q_NULLPTR,
"提示","拒绝访问",QMessageBox::Yes|QMessageBox::Cancel);
if(ret==QMessageBox::Yes)
{
qDebug()<<"you choose yes!\r\n";
}
else
{
qDebug()<<"you choose cancel!\r\n";
}
}
1.5 输入对话框-->QInputDialog
getInt():得到一个输入整数对话框
参数1:父对象
参数2:对话框的标题
参数3:输入提示符
参数4:输入对话框的默认值
参数5:最小值
参数6:最大值
参数7:步进值
参数8:存放按钮值(ok/cancel)的变量
返回值:用户输入的并且确定的整数值
#include "dialog.h"
#include "ui_dialog.h"
#include <QInputDialog>//输入对话框
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
bool ok;
int ret=QInputDialog::getInt(Q_NULLPTR,
"输入整数","input 0-100",0,0,100,5,&ok);
if(ok)
{
qDebug()<<"input num="<<ret<<endl;
}
else
{
qDebug()<<"no input!!!"<<endl;
}
}
1.6 进度对话框
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
ui->progressBar->setValue(0);//设置输出进度条的初值为0
ui->progressBar->setRange(0,100);//设置进度条的范围0-100
ui->horizontalSlider->setValue(0);//设置水平滑动条的初值为0
ui->horizontalSlider->setRange(0,100);//设置水平滑动条的范围0-100
ui->horizontalSlider->setSingleStep(1);//设置水平滑动条的步进值为1
ui->spinBox->setValue(0);//设置选值框的初值为0
ui->spinBox->setRange(0,100);//设置选值框的范围0-100
ui->spinBox->setSingleStep(1);//设置选值框的步进值为1
ui->dial->setValue(0);//设置刻盘的初值为0
ui->dial->setRange(0,100);//设置刻盘的范围0-100
ui->dial->setSingleStep(1);//设置刻盘的步进值为1
//信号和槽函数的关联
//valueChanged(int)----改变数值函数
connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));
connect(ui->spinBox,SIGNAL(valueChanged(int)),ui->horizontalSlider,SLOT(setValue(int)));
connect(ui->dial,SIGNAL(valueChanged(int)),ui->spinBox,SLOT(setValue(int)));
connect(ui->spinBox,SIGNAL(valueChanged(int)),ui->dial,SLOT(setValue(int)));
}
Dialog::~Dialog()
{
delete ui;
}
2 定时器
QTimer timer;timer->start(1000);--->timeout<--->槽函数
#include "widget.h"
#include "ui_widget.h"
#include <QTime>//时间类
#include <QDate>//日期类
#include <QDateTime>//日期时间类
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->progressBar->setValue(0);//设置进度条的初值为0
ui->progressBar->setRange(0,100);//设置进度条的范围0-100
timer=new QTimer(this);//定义定时器
connect(timer,SIGNAL(timeout()),
this,SLOT(showWindowTime()));
connect(timer,SIGNAL(timeout()),
this,SLOT(showProgress()));
connect(timer,SIGNAL(timeout()),
this,SLOT(showWindowTime1()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
timer->start(100);//启动定时器
}
void Widget::showWindowTime()
{
QTime tm=QTime::currentTime();//获取当前windows的时间
QString str=tm.toString("hh:mm:ss");
QDate dt=QDate::currentDate();//获取当前windows的日期
QString str1=dt.toString("yyyy/MM/dd");
ui->label->setText(str1+" "+str);
}
void Widget::showProgress()
{
static int num=0;
num++;
ui->progressBar->setValue(num);
if(100==num)
{
ui->label_2->setText("充电已完成!");
}
}
void Widget::showWindowTime1()
{
#if 0
QTime tm=QTime::currentTime();//获取当前windows的时间
QString str=tm.toString("hh:mm:ss");
QDate dt=QDate::currentDate();//获取当前windows的日期
QString str1=dt.toString("yyyy/MM/dd");
#endif
QDateTime dt=QDateTime::currentDateTime();
QString str=dt.toString("yyyy-MM-dd hh:mm:ss");
//显示日期时间到lcdNumber
ui->lcdNumber->setDigitCount(20);//设置LCD显示控件可显示的位数
ui->lcdNumber->setStyleSheet("background-color:red");//修改背景色颜色为红色
ui->lcdNumber->display(str);//display()---->显示函数
}