QT学习笔记—常用标准对话框
程序员文章站
2022-05-16 18:33:40
...
对话框QDialog
模态对话框
未关闭时不能和应用程序其他窗口交互的对话框
建立模态对话框:
QDialog *dialog = new QDialog(this);
dialog->setModal(true); //设置为模态的方法
dialog->show();
或
QDialog dialog(this);
dialog.exec(); //进入消息循环,进行阻塞
非模态对话框
未关闭时依然可以和应用程序的其他窗口交互的对话框
标准对话框
Qt提供常用的标准对话框都继承自QDialog
类。标准对话提供的方法基本是静态成员函数,直接可以通过类名访问。
颜色对话框
头文件:
#include <QColorDialog>
常用获取颜色方法:
该方法是静态函数,可以直接通过类名访问
[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString(), ColorDialogOptions options = ColorDialogOptions());
//initial 颜色 默认是Qt::white白色
//parent 颜色对话框的父亲
//title 颜色对话框的标题
示例:
void Widget::on_pushButton_clicked()
{
QColor color = QColorDialog::getColor(Qt::yellow, this, tr("颜色对话框"));
qDebug() << "颜色:" << color;
}
文件对话框
头文件:
#include <QFileDialog>
常用静态方法:
- 打开单个文件
QString getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options());
//参数1 父类
//参数2 文件对话框标题
//参数3 默认打开文件夹
//参数4 要打开的文件类型,过滤掉其他不是要打开的文件类型的文件
......
//返回值 : 打开的文件名
-
打开多个文件:
QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options()) //参数和getOpenfile一致 //返回值:字符串类型的list容器,包含了多个文件的文件名
示例:
void Widget::on_pushButton_2_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("文件对话框"), "C:", tr("视频文件(*mp4 *mkv *rmvb)"));
qDebug() << "file name :" << fileName; //打印打开的文件名
}
字体对话框
用于选择字体
头文件:
#include <QFontDialog>
常用静态方法:
QFont getFont(bool *ok, QWidget *parent = Q_NULLPTR)
//参数1 判断是否获取成功字体
//参数2 设置父类
示例:
void Widget::on_pushButton_3_clicked()
{
bool ok;
QFont font = QFontDialog::getFont(&ok, this); //获取字体
if (ok)
{
ui->label->setFont(font); //设置label的字体
qDebug() << font;
}
}
输入对话框
头文件:
#include <QInputDialog>
常用静态成员方法:
-
获取文本
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) //参数1 父类 //参数2 对话框标题 //参数3 输入框名称 //参数4 输入的模式 分别有QLineEdit::Normal(正常模式)、QLineEdit::NoEcho(输入时输入框不显示)、 QLineEdit::Password(密码模式)、QLineEdit::PasswordEchoOnEdit //参数5 输入框默认值 //参数6 是否成功获取输入
void Widget::on_pushButton_4_clicked() { bool ok; QString str = QInputDialog::getText(this, tr("输入字符串对话框"),tr("请输入用户名"), QLineEdit::Normal, tr("Ares"), &ok); if (ok) { qDebug() << str; } }
QLineEdit::Normal:
QLineEdit::Password:
QLineEdit::NoEcho:
输入不显示
- 获取浮点数
double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())
//参数1 父类
//参数2 标题
//参数3 输入框名称
//参数4 默认值
//参数5 输入最小值
//参数6 输入最大值
//参数7 箭头按钮的步进值
//参数8 是否获取成功
double d_num = QInputDialog::getDouble(this, tr("浮点数输入对话框"), tr("请输入0-100之间的浮点数"), 0, 0, 100, 1, &ok);
if (ok)
{
qDebug() << d_num;
}
-
获取整数
int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags()) //获取整数和获取浮点数差不多
-
获取条目
QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
QStringList myItems;
myItems << "北京" << "上海" << "广州" << "深圳";
QString item = QInputDialog::getItem(this, tr("条目输入对话框"), tr("请选择城市"), myItems, 1, true, &ok);
if (ok)
{
qDebug() << item;
}
消息对话框
消息对话框有6种,执行的声音是不相同的。
头文件:
#include <QMessageBox>
常用静态方法:
- 提示对话框
StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
//参数1 父类
//参数2 对话框标题
//参数3 提示内容
//参数4 对话框按钮
//返回按下的按钮
按钮的类型:
void Widget::on_pushButton_5_clicked()
{
int ret;
ret = QMessageBox::information(this, tr("提示对话框"), tr("数值范围必须在-2048~2047之间"), QMessageBox::Ok);
if (ret == QMessageBox::Ok)
{
qDebug() << "按下了ok按钮";
}
}
-
提问对话框
StandardButton question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton) // 参数和提示对话框基本一致,默认是提供了yes和no两个按钮,可以设置成其他按钮
ret = QMessageBox::question(this, tr("提问对话框"), tr("是否删除该文件?")); if (ret == QMessageBox::Yes) { qDebug() << "好的,已删除"; } if (ret == QMessageBox::No) { qDebug() << "保留文件"; }
-
警告对话框
StandardButton warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton) //默认提供的是Ok按钮
ret = QMessageBox::warning(this, tr("警告对话框"), tr("程序无响应,即将自动关机")); if (ret == QMessageBox::Ok) { qDebug() << "关机"; }
-
错误对话框
StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
ret = QMessageBox::critical(this, tr("错误对话框"), tr("发现严重错误, 是否关闭所有文件"), QMessageBox::YesAll); if (ret == QMessageBox::YesAll) { qDebug() << "已关闭"; }
-
关于对话框
void about(QWidget *parent, const QString &title, const QString &text)
QMessageBox::about(this, tr("关于"), tr("这是一首关于你的歌"));