一、简介

Qt提供了一套标准的通用对话框,极大的提高了使用者的开发效率。本文收集了大部分标准的对话框,用户需要使用时只须复制相应的部分代码就行,不用再到处查找。

二、运行图

三、详解

1、中文翻译

(1)内置对话框的翻译

[cpp] view plaincopy
  1. #include <QTextCodec>
  2. #include <QLibraryInfo>
  3. #include <QLocale>
  4. #include <QTranslator>
  5. #include <QDebug>
  6. {
  7. QString translatorFileName = QLatin1String("qt_");
  8. translatorFileName += QLocale::system().name();
  9. QTranslator *translator = new QTranslator(&app);
  10. if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) {
  11. app.installTranslator(translator);
  12. }
  13. }

也可以使用如下,更容易理解:

[cpp] view plaincopy
  1. {
  2. bool bFinded = false;
  3. QString str = "QTDIR=/usr/share/qt4";
  4. str = str.mid(6);
  5. bFinded = translator.load("qt_" + QLocale::system().name(), str.append("/translations/"));
  6. if(bFinded) {
  7. qApp->installTranslator(&translator);
  8. qDebug() << QObject::tr("支持中文的Qt国际化翻译文件!");
  9. }
  10. else {
  11. qDebug() << QObject::tr("没有支持中文的Qt国际化翻译文件!");
  12. }
  13. }

(2) coder中文支持,出现乱码时可以切换

QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));     //Windows下

QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));              //Unix/Linux下

2、颜色对话框

[cpp] view plaincopy
  1. {
  2. QPalette palette = displayTextEdit->palette();
  3. const QColor& color = QColorDialog::getColor(palette.color(QPalette::Base), this);
  4. if(color.isValid()) {
  5. palette.setColor(QPalette::Base, color);
  6. displayTextEdit->setPalette(palette);
  7. }
  8. }

3、错误信息框

[cpp] view plaincopy
  1. {
  2. QErrorMessage box(this);
  3. box.setWindowTitle(tr("错误信息框"));
  4. box.showMessage(tr("错误信息框实例xx。"));
  5. box.showMessage(tr("错误信息框实例xx。"));
  6. box.showMessage(tr("错误信息框实例xx。"));
  7. box.showMessage(tr("错误信息框实例yy。"));
  8. box.showMessage(tr("错误信息框实例zz。"));
  9. box.exec();
  10. }

勾选“再次显示这个消息”,相同的消息会出现多次。若不勾选,则上述的“错误信息框实例xx。”只显示一次。

4、打开文件信息框

[cpp] view plaincopy
  1. {
  2. QString fileName = QFileDialog::getOpenFileName(this,
  3. tr("打开文件"),
  4. "/",
  5. tr("任何文件(*.*)"
  6. ";;文本文件(*.txt)"
  7. ";;C++文件(*.cpp)"));
  8. if (fileName.length() != 0) {
  9. displayTextEdit->setText(fileName);
  10. }
  11. }

QFileDialog提供了很多静态函数,用于获取用户选择的文件。getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框。当然也可以使用QFileDialog类,该类提供的始终是Qt自己绘制的对话框,而不都是调用系统资源API。具体的各个参数的含义可以查看Qt的帮助文档。

[cpp] view plaincopy
  1. {
  2. QFileDialog *fileDialog = new QFileDialog(this);
  3. fileDialog->setWindowTitle(tr("Open Image"));
  4. fileDialog->setDirectory(".");
  5. fileDialog->setFilter(tr("Source Files(*.cpp *.c)"));
  6. if(fileDialog->exec() == QDialog::Accepted) {
  7. QString path = fileDialog->selectedFiles()[0];
  8. displayTextEdit->setText(path);
  9. //QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
  10. } else {
  11. //QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
  12. }
  13. }

5、打开多个文件对话框

比上述打开文件对话框多了个打开多个对话框的功能,其他一样。

[cpp] view plaincopy
  1. void CBuiltinDlg::MultiOpenFile()
  2. {
  3. QStringList files = QFileDialog::getOpenFileNames(
  4. this, tr("Select one or more files to open"),
  5. "/",
  6. tr("All Files (*);;Text Files (*.txt)"));
  7. if (files.count()) {
  8. displayTextEdit->setText(QString("[%1]").arg(files.join(", ")));
  9. }
  10. }

6、保存文件对话框

与打开文件对话框类似。也提供本地的对话框和Qt自己绘制的对话框。

[cpp] view plaincopy
  1. void CBuiltinDlg::SaveFileName()
  2. {
  3. /*
  4. //getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框
  5. QFileDialog::Options options;
  6. QString selectedFilter;
  7. options |= QFileDialog::DontUseNativeDialog;
  8. QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
  9. displayTextEdit->toPlainText(),
  10. tr("file (*.cpp *.c *.txt)"),
  11. &selectedFilter,
  12. options);
  13. if (!fileName.isEmpty()) {
  14. //save fileName
  15. displayTextEdit->setText("save file:" + fileName);
  16. }
  17. */
  18. //QFileDialog提供的始终是Qt自己绘制的对话框
  19. QFileDialog* saveFileDialog = new QFileDialog(this);
  20. saveFileDialog->setWindowTitle(QString("Save File"));
  21. saveFileDialog->setFileMode(QFileDialog::AnyFile);
  22. saveFileDialog->setNameFilter(tr("file (*.cpp *.c *.txt)"));
  23. QString* fileName=new QString();
  24. if(saveFileDialog->exec())
  25. *fileName = saveFileDialog->getSaveFileName();
  26. if(fileName->size() > 0) {
  27. displayTextEdit->setText("save file:" + *fileName);
  28. }
  29. delete fileName;
  30. fileName = NULL;
  31. }

7、字体对话框

[cpp] view plaincopy
  1. {
  2. bool ok;
  3. const QFont& font = QFontDialog::getFont(&ok,
  4. displayTextEdit->font(),
  5. this,
  6. tr("字体对话框"));
  7. if(ok) {// 如果<确定>,设置字体.
  8. displayTextEdit->setFont(font);
  9. }
  10. }

8、页设置对话框

[cpp] view plaincopy
  1. {
  2. QPrinter printer;
  3. QPageSetupDialog dlg(&printer, this);
  4. dlg.setWindowTitle(tr("页设置对话框"));
  5. if (dlg.exec() == QDialog::Accepted) {
  6. // 进行下一步的处理。
  7. }
  8. }

9、选择文件夹对话框

可以通过options选项设置对话框显示的文件类型,与打开文件对话框类似。

[cpp] view plaincopy
  1. void CBuiltinDlg::GettExistingDirectory()
  2. {
  3. QFileDialog::Options options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly;
  4. options |= QFileDialog::DontUseNativeDialog;
  5. QString directory = QFileDialog::getExistingDirectory(this,
  6. tr("Open Directory"),
  7. "/home",
  8. options);
  9. if (!directory.isEmpty())
  10. displayTextEdit->setText(directory);
  11. }

10、进度对话框

显示文件复制或文件下载的进度条。

[cpp] view plaincopy
  1. {
  2. QProgressDialog progress(tr("正在复制文件..."), tr("取消"), 0, 1000, this);
  3. QFont font("ZYSong18030",10);
  4. progress.setFont(font);
  5. progress.setWindowModality(Qt::WindowModal);
  6. progress.setWindowTitle(tr("进度对话框"));
  7. progress.show();
  8. for (int i = 0; i < 1000; i++) {
  9. progress.setValue(i);
  10. qApp->processEvents();
  11. if (progress.wasCanceled())
  12. break;
  13. QTest::qWait(1);
  14. //... 复制文件处理。
  15. }
  16. progress.setValue(1000);
  17. }

11、打印对话框

[cpp] view plaincopy
  1. {
  2. QPrinter printer;
  3. QPrintDialog dlg(&printer, this);
  4. dlg.setWindowTitle(tr("打印对话框"));
  5. if (dlg.exec() == QDialog::Accepted) {
  6. // 进行下一步的处理。
  7. }
  8. }

12、输入对话框

输入对话框包括:字符串输入、下拉列表框输入、Int类型输入和Double类型输入。

[cpp] view plaincopy
  1. void CBuiltinDlg::slotName()
  2. {
  3. bool ok;
  4. QString name = QInputDialog::getText(this,
  5. tr("用户名"),
  6. tr("请输入新的用户名:"),
  7. QLineEdit::Normal,
  8. "name",
  9. &ok);
  10. if(ok && !name.isEmpty()) {
  11. displayTextEdit->setText(name);
  12. }
  13. }
  14. void CBuiltinDlg::slotSex()
  15. {
  16. QStringList list;
  17. list << tr("男") << tr("女");
  18. bool ok;
  19. QString sex = QInputDialog::getItem(this,tr("性别"),
  20. tr("请选择性别:"),list,0,false,&ok);
  21. if (ok) {
  22. displayTextEdit->setText(sex);
  23. }
  24. }
  25. void CBuiltinDlg::slotAge()
  26. {
  27. bool ok;
  28. int age = QInputDialog::getInteger(this,tr("年龄"),
  29. tr("请输入年龄:"), 20,0,150,1,&ok);
  30. if(ok) {
  31. displayTextEdit->setText(QString(tr("%1")).arg(age));
  32. }
  33. }
  34. void CBuiltinDlg::slotStature()
  35. {
  36. bool ok;
  37. double high = QInputDialog::getDouble(this,tr("身高"),
  38. tr("请输入身高:"),175.00,0,230.00,1,&ok);
  39. if(ok) {
  40. displayTextEdit->setText(QString(tr("%1")).arg(high));
  41. }
  42. }

13、消息对话框

消息对话框如下:

[cpp] view plaincopy
  1. void CBuiltinDlg::slotQuestion()
  2. {
  3. switch(QMessageBox::question(this,tr("询问"),tr("重新开始?"),
  4. QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
  5. {
  6. case QMessageBox::Ok:
  7. displayTextEdit->setText(tr("询问按钮 / 确定"));
  8. break;
  9. case QMessageBox::Cancel:
  10. displayTextEdit->setText(tr("询问按钮 / 取消"));
  11. break;
  12. default:
  13. break;
  14. }
  15. }
  16. void CBuiltinDlg::slotInformation()
  17. {
  18. QMessageBox::information(this,tr("提示"),tr("提示信息"));
  19. displayTextEdit->setText(tr("提示信息框"));
  20. }
  21. void CBuiltinDlg::slotWarning()
  22. {
  23. switch(QMessageBox::warning(this,tr("警告"),tr("是否要保存文档?"),
  24. QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
  25. {
  26. case QMessageBox::Save:
  27. displayTextEdit->setText(tr("警告对话框 / 保存"));
  28. break;
  29. case QMessageBox::Discard:
  30. displayTextEdit->setText(tr("警告对话框 / 不保存"));
  31. break;
  32. case QMessageBox::Cancel:
  33. displayTextEdit->setText(tr("警告对话框 / 取消"));
  34. break;
  35. default:
  36. break;
  37. }
  38. }
  39. void CBuiltinDlg::slotCritical()
  40. {
  41. QMessageBox::critical(this, tr("错误"),tr("告诉用户一个严重的错误!"));
  42. displayTextEdit->setText(tr("错误信息框"));
  43. }
  44. void CBuiltinDlg::slotAbout()
  45. {
  46. QMessageBox::about(this,tr("关于"),tr("对话框例子!"));
  47. displayTextEdit->setText(tr("关于信息框"));
  48. }
  49. void CBuiltinDlg::slotAboutQt()
  50. {
  51. QMessageBox::aboutQt(this, tr("关于Qt"));
  52. displayTextEdit->setText(tr("关于Qt信息框"));
  53. }
  54. void CBuiltinDlg::slotCustom()
  55. {
  56. QMessageBox customMsgBox;
  57. customMsgBox.setWindowTitle(tr("自定义弹出对话框"));
  58. QPushButton *lockButton = customMsgBox.addButton(tr("加锁"),QMessageBox::ActionRole);
  59. QPushButton *unlockButton = customMsgBox.addButton(tr("解锁"),QMessageBox::ActionRole);
  60. QPushButton *cancelButton = customMsgBox.addButton(QMessageBox::Cancel);
  61. customMsgBox.setText(tr("这是自定义对话框"));
  62. customMsgBox.exec();
  63. if(customMsgBox.clickedButton() == lockButton)
  64. displayTextEdit->setText(tr("自定义对话框 / 加锁"));
  65. if(customMsgBox.clickedButton() == unlockButton)
  66. displayTextEdit->setText(tr("自定义对话框 / 解锁"));
  67. if(customMsgBox.clickedButton() == cancelButton)
  68. displayTextEdit->setText(tr("自定义对话框 / 取消"));
  69. }

14、向导对话框

创建一个向导对话框,可以在页面上添加各种控件。

[cpp] view plaincopy
  1. void CBuiltinDlg::slotWizard()
  2. {
  3. QWizard wizard;
  4. wizard.addPage(createFirstPage());
  5. wizard.addPage(createSecondPage());
  6. wizard.setWindowTitle(tr("向导对话框"));
  7. wizard.exec();
  8. }
  9. QWizardPage* CBuiltinDlg::createFirstPage()
  10. {
  11. QWizardPage *page = new QWizardPage;
  12. page->setTitle(tr("简介"));
  13. QLabel *label = new QLabel(tr("第一页"));
  14. label->setWordWrap(true);
  15. QVBoxLayout *layout = new QVBoxLayout;
  16. layout->addWidget(label);
  17. page->setLayout(layout);
  18. return page;
  19. }
  20. QWizardPage* CBuiltinDlg::createSecondPage()
  21. {
  22. QWizardPage *page = new QWizardPage;
  23. page->setTitle(tr("正文"));
  24. QLabel *label = new QLabel(tr("第二页"));
  25. label->setWordWrap(true);
  26. QVBoxLayout *layout = new QVBoxLayout;
  27. layout->addWidget(label);
  28. page->setLayout(layout);
  29. return page;
  30. }

15、颜色控件框

[cpp] view plaincopy
  1. void CBuiltinDlg::slotColor(int index)
  2. {
  3. QStringList colorList = QColor::colorNames();
  4. QColor color = QColor(colorList[index]);
  5. QPalette p = displayTextEdit->palette();
  6. p.setColor(QPalette::Text, color);
  7. displayTextEdit->setPalette(p);
  8. }

可以选择使用Qt内置的颜色。

通用对话框Dialog相关推荐

  1. 第七章:无模式对话框 和 Windows通用对话框类

    第七章:无模式对话框 和 Windows通用对话框类 1,[无模式对话框]在它处于激活状态下还允许用户在(同一个应用程序中)其它地方工作. [通用对话框]则是C++和一组Windows的实用对话框之间 ...

  2. [QT_040]Qt学习之通用对话框:QColorDialog、QFontDialog、QInputDialog

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 11.3 通用对话框:QColorDialog/QFontDi ...

  3. [QT_041]Qt学习之通用对话框:QErrorMessage、QFileDialog、QProgressDialog

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 11.4 通用对话框:QErrorMessage.QFileD ...

  4. Windows程序设计-通用对话框

    增加通用对话框:打开/保存 POPPAD.RC / // // Dialog //ABOUTBOX DIALOG DISCARDABLE 32, 32, 180, 100 STYLE DS_MODAL ...

  5. Android 对话框(Dialog)大全

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int) ...

  6. wxWidgets:使用通用对话框

    wxWidgets:使用通用对话框 wxWidgets:使用通用对话框 介绍 使用文件对话框 - wxFileDialog 使用字体对话框 - wxFontDialog 使用目录对话框 - wxDir ...

  7. Android项目实战(三十二):圆角对话框Dialog

    原文:Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对 ...

  8. Android对话框dialog大全(代码直接可用)

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

  9. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户 ...

  10. Android对话框dialog大全

    Activities提供了一种方便管理的创建.保存.回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog( ...

最新文章

  1. App.config的典型应用
  2. 根据gtf格式的基因注释文件得到人所有基因的染色体坐标
  3. nodejs http.get 方法可以 request 不行
  4. 零基础学python可以吗-零基础学习Python可以学会吗?你有哪些方法?
  5. 购买阿里云服务器地域如何选择?
  6. 5-global_data介绍
  7. 记事本中写c/c++程序在Windows下执行
  8. 苹果测试网速软件,Mac 网速测试工具 SpeedTest by Ookla
  9. google linux桌面快捷方式,centos7 rhel7 linux下怎么安装google chrome 设置谷歌浏览器桌面快捷方式...
  10. 关于cdd文件的配置
  11. php微缩图,PHP进阶技巧:php用流方式制作缩略图
  12. python删除表格重复行_python 删除excel表格重复行,数据预处理操作
  13. 如何在PC中升级和安装新的图形卡
  14. 美团:不存在大众点评合并进美团App的可能性
  15. java鬼吹灯搬山法杖_鬼吹灯昆仑神宫技能搭配攻略之搬山职业篇
  16. 四舍五入VS银行家舍入 (四舍六入五取偶)
  17. 弹性伸缩,轻松上云-华为云弹性云服务器 ECS
  18. 【期货量化】通过日结算率计算日/月收益率以及利用resample进行时间序列处理
  19. python小说文本挖掘_Python小说文本挖掘正则表达式分析案例
  20. Android Java 必备:Socket通信

热门文章

  1. 基于Android的防疫信息管理系统源码【包调试运行】
  2. 微信小程序二手汽车拍卖系统源码【包调试】
  3. java初级程序员成长之路
  4. 记一次基于公众号的微信H5开发项目(一)
  5. 火狐开发----如何快速的安装火狐XPI文件
  6. 深入java虚拟机(圣思园)
  7. Excel生成柱状图报表示例
  8. 十大排行优惠券app,哪个更适合
  9. A Frustratingly Easy Approach for Joint Entity and Relation Extraction(陈丹琦2020)
  10. MySQL大表优化方案