在看这一章之前,如果不了解信号与槽,最好先接触信号与槽函数。
点击这里: 信号与槽
模态对话框:在关闭该窗口之前不能与同一应用的其他窗口发生互动,比如文件的打开操作。
非模态对话框:在关闭该窗口前还可以与同一应用的其他窗口进行交互。
大家可以感受一下这个代码,放在构造函数就可以代码如下:
QMenuBar *mBar =menuBar();
setMenuBar(mBar);
QMenu *menu = mBar->addMenu("对话框");
QAction *p1 = menu->addAction("模态对话框");
connect(p1, &QAction::triggered,
[=](){
QDialog dlg;
dlg.exec();
qDebug()<<"模态对话框";
});
QAction *p2 = menu->addAction("非模态对话框");
connect(p2, &QAction::triggered,
[=](){
/*QDialog dlg; 如果定义到这里会一闪而过,
因为对话框生命周期到了,因此在类中对其定义*/
dlg1.show();
qDebug()<<"非模态对话框";
});
1.颜色对话框
void MainWindow::on_pushButton_clicked()
{
QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
qDebug()<<"color:"<<color;
}
2.字体对话框
void MainWindow::on_pushButton_2_clicked()
{
bool ok;
QFont font=QFontDialog::getFont(&ok,this);
if(ok){
ui->pushButton_2->setFont(font);
}
else{
qDebug()<<tr("没有选择字体");
}
}
3.消息对话框
void MainWindow::on_pushButton_3_clicked()
{
//问题对话框
int ret1 = QMessageBox::question(this,tr("问题对话框"),
tr("你了解Qt吗?"),QMessageBox::Yes,QMessageBox::No);
//提示对话框
int ret2 = QMessageBox::information(this,tr("提示对话框"),
tr("加油学习!"),QMessageBox::Ok);
//警告对话框
int ret3 = QMessageBox::warning(this,tr("警告对话框"),
tr("不能摸这里!"),QMessageBox::Yes);
//错误对话框
int ret4 = QMessageBox::critical(this,tr("严重错误对话框"),
tr("发现严重错误!!关闭所有文件!"),QMessageBox::YesAll);
//关于对话框
QMessageBox::about(this,tr("关于对话框"),tr("让我们化身为猿吧!"));
}
4.输入对话框
void MainWindow::on_pushButton_5_clicked()
{
bool ok;
//获取字符串
QString str = QInputDialog::getText(this,tr("输入字符串对话框"),
tr("请输入用户名:"),QLineEdit::Normal,tr("admin"),&ok);
if(ok) qDebug()<<"String="<<str;
//获取整数
int value1 = QInputDialog::getInt(this,tr("输入整数对话框"),
tr("请输入一个整数"),100,-1000,1000,10,&ok);
if(ok) qDebug()<<"value1="<<value1;
//获取浮点数
int value2 = QInputDialog::getDouble(this,tr("输入小数对话框"),
tr("请输入一个小数"),0.00,-1000,1000,2,&ok);
if(ok) qDebug()<<"value2="<<value2;
//获取条目
QStringList items;
items<<tr("条目1")<<tr("条目二");
QString item = QInputDialog::getItem(this,tr("输入条目对话框"),
tr("请选择或输入一个条目:"), items,0,true,&ok);
if(ok) qDebug()<<"item="<<item;
}
5.进度对话框
void MainWindow::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件复制进度"),tr("取消"),
0,50000,this);
dialog.setWindowTitle("进度对话框");
dialog.setWindowModality(Qt::WindowModal);//将对话框定为模态
dialog.show();
for (int i=0;i<50000;i++) {
dialog.setValue(i);//设置进度当前值
QCoreApplication::processEvents();//避免界面冻结
if(dialog.wasCanceled()) break;//按下取消键中断
}
dialog.setValue(50000);
qDebug() << tr("复制结束!");
}
6.错误信息对话框
void MainWindow::on_pushButton_7_clicked()
{
errordlg = new QErrorMessage(this);
errordlg->setWindowTitle(tr("错误信息对话框!"));
errordlg->showMessage(tr("这里是出错信息!"));
}
7.向导对话框
//做页窗口
//每一个都要在类中定义
QWizardPage * MainWindow::createPage1()
{
QWizardPage * page = new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage * MainWindow::createPage2()
{
QWizardPage * page = new QWizardPage;
page->setTitle("用户选择信息");
return page;
}
QWizardPage * MainWindow::createPage3()
{
QWizardPage * page = new QWizardPage;
page->setTitle("结束");
return page;
}
void MainWindow::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle("向导对话框");
wizard.addPage(createPage1());
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
8.文件对话框(文件的种类很多这里仅仅举一个例子,后续讲文件时会做细讲)
void MainWindow::on_pushButton_4_clicked()
{
QString filename = QFileDialog::getOpenFileName(this,tr("文件对话框"),
"D:",tr("图片文件(*png *jpg)"));
qDebug()<<"filename="<<filename;
}