Qt之各种对话框(信号和槽)
一、多窗口切换
第一步:首先创建一个项目,之后进入ui设计模式,在左侧找到Label和Push Button这两个左键拖入。
第二步:双击Label将其修改为主界面,之后在Push Button 右键选择clicked()转到槽。
第三步:在函数槽中添加:(需要包含#include<QDialogt>)
void MainWindow::on_pushButton_clicked()
{
QDialog * dialog = new QDialog(this); //创建一个新的会话窗口
dialog -> show();
}
第四步:运行点击PushButton 实现多窗口。
二、颜色对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QColorDialog>)
QColor color = QColorDialog::getColor(Qt::red,this,QObject::tr("颜色对话框"));this 代表对象本身 ::区域运算符 代表使用某个类中的函数或变量等
三、文件对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QFileDialog>)
QString filename = QFileDialog::getOpenFileName(this,QObject::tr("文件对话框"),"D:",QObject::tr("图片文件(*png *jpg)"));
表示打开D:盘查看png或ipg的文件。*png和*jpg两者之间有一个空格。
四、字体对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QFontDialog>)
void MainWindow::on_pushButton_4_clicked()
{
bool ok; //判断标志,判断是否点击了ok确定按钮
QFont font = QFontDialog::getFont(&ok,this);
if(ok)
ui -> pushButton_4-> setFont(font); //将字体设置为所选字体
}结果图:
五、输入消息对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QInputDialog>)
bool ok;
QString string = QInputDialog::getText(this,QObject::tr("输入字符串对话框"),
QObject::tr("请输入用户名:"),QLineEdit::Normal
,QObject::tr("admin"),&ok);
if(ok)
qDebug()<<"string:"<<string;
int value1 = QInputDialog::getInt(this,QObject::tr("请输入整数对话框"),
QObject::tr("请输入-1000~1000之间的数值"),100,-1000,1000,10,&ok);
if(ok)
qDebug()<<"value1:"<<value1;
double value2 = QInputDialog::getDouble(this,QObject::tr("输入浮点数对话框"),
QObject::tr("请输入-1000~1000之间的数值"),0.00,-1000,1000,2,&ok);
if(ok)
qDebug()<<"value2:"<<value2;
QStringList items;
items<<QObject::tr("条目1")<<QObject::tr("条目2");
QString item = QInputDialog::getItem(this,QObject::tr("输入条目对话框"),
QObject::tr("请选择一个条目"),items,0,false
,&ok);
if(ok)
qDebug()<<"item:"<<item;
用户名-》QLineEdit::Normal//模式为输入显示内容整数->10 表示上下增减按钮一次增或者减10
浮点数->2表示小数点后留两位
条目-> 0表示默认显示第0个条目,true表示条目是否可以更改(true为可修改)。
结果图:六、消息对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QMessageBox>)
int ret1 = QMessageBox::question(this,QObject::tr("问题对话框"),
QObject::tr("你了解Qt么?"),QMessageBox::Yes,QMessageBox::No);
if(ret1 == QMessageBox::Yes)
qDebug()<<QObject::tr("问题!");
int ret2 = QMessageBox::information(this,QObject::tr("提示对话框"),
QObject::tr("这是Qt书籍!"),QMessageBox::Ok);
if(ret2 == QMessageBox::Ok)
qDebug()<<QObject::tr("提示!");
int ret3 = QMessageBox::warning(this,QObject::tr("警告对话框"),
QObject::tr("不能提前结束!"),QMessageBox::Abort);
if(ret3 == QMessageBox::Abort)
qDebug()<<QObject::tr("警告!");
int ret4 = QMessageBox::critical(this,QObject::tr("严重错误对话框"),
QObject::tr("发现了一个严重错误!现在要关闭所有文件!"),QMessageBox::YesAll);
if(ret4 == QMessageBox::YesAll)
qDebug()<<QObject::tr("错误!");
QMessageBox::about(this,QObject::tr("关于对话框"),QObject::tr("Qt gongzuo!"));
七、进度对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QProgressDialog>)
QProgressDialog dialog(QObject::tr("文件复制进度"),QObject::tr("取消"),0,50000,this); //50000运行次数
dialog.setWindowTitle(QObject::tr("进度对话框"));
dialog.setWindowModality(Qt::WindowModal); //将对话框设置为模态(不可交互,只能等一个结束另一个才可以运行)
dialog.show();
for(int i = 0;i < 50000;i++)
{
dialog.setValue(i); //每一次将值改标为i
QCoreApplication::processEvents(); //避免长时间传输导致界面冻结
if(dialog.wasCanceled()) //如果点击cancel按钮则取消传输
break;
}
dialog.setValue(50000);
qDebug()<<QObject::tr("复制结束!");结果图:
八、向导对话框
添加一个按钮(Push Button)(需要头文件#include<QWizard>)
1、首先在xxx.h文件中添加#include<QWizard>
添加声明:
private:
Ui::MyWidget *ui;
QWizardPage * createPage1();
QWizardPage * createPage2();
QWizardPage * createPage3();
目的是生成三个向导页面。
2、在xxx.cpp文件中定义
QWizardPage * MyWidget::createPage1()
{
QWizardPage * page = new QWizardPage;
page -> setTitle(QObject::tr("介绍"));
return page;
}
QWizardPage * MyWidget::createPage2()
{
QWizardPage * page = new QWizardPage;
page -> setTitle(QObject::tr("用户选择信息"));
return page;
}
QWizardPage * MyWidget::createPage3()
{
QWizardPage * page = new QWizardPage;
page -> setTitle(QObject::tr("结束"));
return page;
}3、在槽中定义:
QWizard wizard(this);
wizard.setWindowTitle(QObject::tr("向导对话框"));
wizard.addPage(createPage1());
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
结果图:
九、错误信息对话框
添加一个按钮(Push Button),右键转到槽添加:(需要头文件#include<QErrorMessage>)
QErrorMessage * dialog = new QErrorMessage(this);
dialog -> setWindowTitle(QObject::tr("错误消息对话框"));
dialog -> showMessage(QObject::tr("这里是出错信息"));结果图: