内容参考于《Qt Creator快速入门》(第三版)
目的:使用c++,不是为了深入学习c++也不是为了学习QT
三.多窗口切换和对话框
1. 窗口切换示例
目录
mydialog.ui
mydialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H
#include <QDialog>
namespace Ui {
class MyDialog;
}
class MyDialog : public QDialog
{
Q_OBJECT
public:
explicit MyDialog(QWidget *parent = 0);
~MyDialog();
private slots:
void on_pushButton_clicked();
private:
Ui::MyDialog *ui;
};
#endif // MYDIALOG_H
mydialog.cpp
#include "mydialog.h"
#include "ui_mydialog.h"
MyDialog::MyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MyDialog)
{
ui->setupUi(this);
}
MyDialog::~MyDialog()
{
delete ui;
}
void MyDialog::on_pushButton_clicked()
{
// 隐藏this页面,就是一个页面切换到了另一个页面
// 同时exec运行结束,并返回accept
accept();
}
mywidget.ui
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private:
Ui::MyWidget *ui;
public slots:
void on_showChildButton_clicked();
private slots:
void on_pushButton_clicked();
};
#endif // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>
#include "mydialog.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::on_showChildButton_clicked()
{
QDialog *dialog = new QDialog(this);
dialog->show();
}
void MyWidget::on_pushButton_clicked()
{
// 先关闭自己(主界面),其实它是隐藏起来了,并没有真正退出。
// close不一定使程序退出,只有只剩下最后一个界面且没有父类,
// 这时候调用close,程序才会退出,其他情况只是隐藏起来,没有销毁。
// 然后新建MyDialog对象
close();
MyDialog dlg;
// 如果按下了“进入主窗口”按钮,则再次显示主界面
// 否则,因为现在已经没有显示的界面了,所以程序将退出
if(dlg.exec() == QDialog::Accepted)
{
// 登录界面如果结束,那么就继续执行自己
show();
}
}
2. 对话框示例
mywidget.ui
mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDebug>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QMessageBox>
#include <QProgressDialog>
#include <QErrorMessage>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
errordlg = new QErrorMessage(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
// 颜色对话框
void MyWidget::on_pushButton_clicked()
{
// QColor color = QColorDialog::getColor(Qt::red, this, tr("颜色对话框"),
// QColorDialog::ShowAlphaChannel);
QColorDialog dialog(Qt::red, this); // 创建对象
dialog.setOption(QColorDialog::ShowAlphaChannel); // 显示alpha选项
dialog.exec(); // 以模态方式运行对话框
QColor color = dialog.currentColor(); // 获取当前颜色
qDebug() << "color: " << color;
}
// 文件对话框
void MyWidget::on_pushButton_2_clicked()
{
// QString fileName = QFileDialog::getOpenFileName(this, tr("文件对话框"),
// "D:", tr("图片文件(*png *jpg);;文本文件(*txt)"));
// qDebug() << "fileName:" << fileName;
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件对话框"),
"D:", tr("图片文件(*png *jpg)"));
qDebug()<< "fileNames:" << fileNames;
}
// 字体对话框
void MyWidget::on_pushButton_3_clicked()
{
// ok用于标记是否按下了“OK”按钮
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
// 如果按下“OK”按钮,那么让“字体对话框”按钮使用新字体
// 如果按下“Cancel”按钮,那么输出信息
if (ok) ui->pushButton_3->setFont(font);
else qDebug() << tr("没有选择字体!");
}
// 输入对话框
void MyWidget::on_pushButton_4_clicked()
{
bool ok;
// 获取字符串
QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
if(ok) qDebug() << "string:" << string;
// 获取整数
int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
if(ok) qDebug() << "value1:" << value1;
// 获取浮点数
double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
if(ok) qDebug() << "value2:" << value2;
QStringList items;
items << tr("条目1") << tr("条目2");
// 获取条目
QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
tr("请选择或输入一个条目"), items, 0, true, &ok);
if(ok) qDebug() << "item:" << item;
}
// 消息对话框
void MyWidget::on_pushButton_5_clicked()
{
// 问题对话框
int ret1 = QMessageBox::question(this, tr("问题对话框"),
tr("你了解Qt吗?"), QMessageBox::Yes, QMessageBox::No);
if(ret1 == QMessageBox::Yes) qDebug() << tr("问题!");
// 提示对话框
int ret2 = QMessageBox::information(this, tr("提示对话框"),
tr("这是Qt书籍!"), QMessageBox::Ok);
if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");
// 警告对话框
int ret3 = QMessageBox::warning(this, tr("警告对话框"),
tr("不能提前结束!"), QMessageBox::Abort);
if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");
// 错误对话框
int ret4 = QMessageBox::critical(this, tr("严重错误对话框"),
tr("发现一个严重错误!现在要关闭所有文件!"), QMessageBox::YesAll);
if(ret4 == QMessageBox::YesAll) qDebug() << tr("错误");
// 关于对话框
QMessageBox::about(this, tr("关于对话框"),
tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));
}
// 进度对话框
void MyWidget::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
dialog.setWindowTitle(tr("进度对话框")); // 设置窗口标题
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); // 这样才能显示100%,因为for循环中少加了一个数
qDebug() << tr("复制结束!");
}
// 错误信息对话框
void MyWidget::on_pushButton_7_clicked()
{
errordlg->setWindowTitle(tr("错误信息对话框"));
errordlg->showMessage(tr("这里是出错信息!"));
}
QWizardPage * MyWidget::createPage1() // 向导页面1
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
QWizardPage * MyWidget::createPage2() // 向导页面2
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("用户选择信息"));
return page;
}
QWizardPage * MyWidget::createPage3() // 向导页面3
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
// 向导对话框
void MyWidget::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1()); // 添加向导页面
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
颜色对话框
文件对话框
字体对话框
输入对话框
消息对话框
进度对话框
错误消息对话框
向导对话框