QT对话框与多窗口程序
标准对话框
Qt为应用程序设计提供了常用的标准对话框,如打开文件对话框,选择颜色对话框,信息提示和确认选择对话框,标准输入对话框等。标准对话框都提供了一些静态函数去使用对话框的主要功能。
QFileDialog
QFileDialog让使用者可以遍历文件系统,选择一个或多个文件或路径。官方文档
静态函数getOpenFileName:选择一个文件
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
静态函数getOpenFileNames:选择多个文件
静态函数getExistingDirectory:选择文件目录
静态函数getSaveFileName:界面显示保存文件,但不会对文件有具体的行为,保存文件需要额外编码实现。
QColorDialog
QColorDialog是颜色选择对话框,可以让用户选择颜色。官方文档
静态函数getColor可以打开颜色对话框并选择颜色。
QFontDialog
QFontDialog提供一个字体选择对话框。官方文档
静态函数getFont可以打开字体选择对话框并选择字体。
QProgressDialog
QProgressDialog用于提示用户操作进度,描述正在运行的应用,可以让用户取消操作。官方文档
QInputDialog
QInputDialog的输入可以是字符串,数字,item列表。label必须被设置告诉用户他应该输入什么。官方文档
静态函数getText:输入字符串
静态函数getInt:输入整数
静态函数getDoub:输入浮点数
静态函数getItem:输入item
QMessageBox
QMessageBox可以展示图标和按钮与用户交互,通过消息框展示信息告知用户当前的情况。官方文档
静态函数information展示如下:
静态函数question展示如下:
静态函数warning展示如下:
静态函数critical展示如下:
静态函数about展示如下:
示例
在ui文件中编辑图形状,并编写相应槽函数。
#include <QFileDialog>
#include <QColorDialog>
#include <QFontDialog>
#include <QProgressDialog>
#include <QInputDialog>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QString out;
QString s = QFileDialog::getOpenFileName(this, QString("选择文件"), QDir::currentPath(), QString("文本文件(*.txt);;图片文件(*.png *.jpj);;全部文件(*.*)"), &out);
qDebug() << s << out;
}
void Widget::on_pushButton_2_clicked()
{
QString out;
QStringList s = QFileDialog::getOpenFileNames(this, QString("选择文件"), QDir::currentPath(), QString("文本文件(*.txt);;图片文件(*.png *.jpj);;全部文件(*.*)"), &out);
for(int i = 0; i < s.size(); ++i)
qDebug() << s[0];
qDebug() << out;
}
void Widget::on_pushButton_3_clicked()
{
QString path = QFileDialog::getExistingDirectory(this, QString("选择路径"), QDir::currentPath());
qDebug() << path;
}
void Widget::on_pushButton_4_clicked()
{
QString out;
QString s = QFileDialog::getSaveFileName(this, QString("保存文件"), QDir::currentPath(), QString("文本文件(*.txt);;图片文件(*.png *.jpj);;全部文件(*.*)"), &out );
qDebug() << s << out;
}
void Widget::on_pushButton_5_clicked()
{
QPalette p = ui->label->palette();
QColor c = p.color(QPalette::WindowText);
c = QColorDialog::getColor(c, this, QString("选择颜色"));
if (c.isValid())
{
p.setColor(QPalette::WindowText, c);
ui->label->setPalette(p);
}
}
void Widget::on_pushButton_6_clicked()
{
QFont f = ui->label->font();
bool checked;
QFont f1 = QFontDialog::getFont(&checked, f, this, QString("选择字体"));
if(checked)
ui->label->setFont(f1);
}
void Widget::on_pushButton_7_clicked()
{
QProgressDialog d(QString("程序正在运行"), QString("取消"), 0, 200, this);
connect(&d, &QProgressDialog::canceled, this, &Widget::doSomething);
d.setWindowTitle(QString("进度条对话框"));
d.setWindowModality(Qt::WindowModal);
d.setAutoClose(true);
d.setAutoReset(true);
d.setLabelText(QString("复制中"));
QElapsedTimer msCounter;
for(int i = 0; i< 200; ++i)
{
msCounter.start();
d.setValue(i);
while(1)
{
if(msCounter.elapsed() > 30)
break;
}
if(d.wasCanceled())
break;
}
}
void Widget::doSomething()
{
qDebug() << "取消";
}
void Widget::on_pushButton_14_clicked()
{
bool ok;
QString s = QInputDialog::getText(this