Qt QColorDialog QErrorMessage QFileDialog QFontDialog QProgressDialog 等对话框的使用测试

来源:互联网 发布:什么是数据接口 编辑:程序博客网 时间:2024/06/11 21:47

测试程序 界面:

main文件就省略了

//对话框头文件

// chapter2/builtin/src/builtindlg.h.

  1. #ifndef _BUILTINDLG_H_
  2. #define _BUILTINDLG_H_
  3. #include <QtGui/QDialog>
  4. class QTextEdit;
  5. class QPushButton;
  6. class CBuiltinDlg : public QDialog
  7. {
  8.  Q_OBJECT
  9. public:
  10. CBuiltinDlg(QWidget* = 0);
  11. virtual ~CBuiltinDlg() { }
  12. private:
  13. QTextEdit*displayTextEdit;
  14. QPushButton*colorPushBtn;
  15. QPushButton*errorPushBtn;
  16. QPushButton*filePushBtn;
  17. QPushButton*fontPushBtn;
  18. QPushButton*inputPushBtn;
  19. QPushButton*pagePushBtn;
  20. QPushButton*progressPushBtn;
  21. QPushButton*printPushBtn;
  22. private slots:
  23. void doPushBtn();
  24. };
  25. #endif

私有变量定义了8个按钮和一个文本编辑框.

还定义了一个私有槽,在其中做一些逻辑判断分别对不同的按钮进行响应.

//对话框的源文件

// chapter2/builtin/src/builtindlg.cpp.

  1. #include <QtGui/QtGui>
  2. #include "builtindlg.h"
  3. CBuiltinDlg::CBuiltinDlg(QWidget* parent)
  4.  :QDialog(parent)
  5. {
  6. displayTextEdit = new QTextEdit(tr("Qt的标准通用对话框。"));
  7. QGridLayout* gridLayout = new QGridLayout;
  8. colorPushBtn = new QPushButton(tr("颜色对话框"));
  9. errorPushBtn = new QPushButton(tr("错误信息框"));
  10. filePushBtn = new QPushButton(tr("文件对话框"));
  11. fontPushBtn = new QPushButton(tr("字体对话框"));
  12. inputPushBtn = new QPushButton(tr("输入对话框"));
  13. pagePushBtn = new QPushButton(tr("页设置对话框"));
  14. progressPushBtn = new QPushButton(tr("进度对话框"));
  15. printPushBtn= new QPushButton(tr("打印对话框"));
  16. gridLayout->addWidget(colorPushBtn, 0, 0, 1, 1);
  17. gridLayout->addWidget(errorPushBtn, 0, 1, 1, 1);
  18. gridLayout->addWidget(filePushBtn, 0, 2, 1, 1);
  19. gridLayout->addWidget(fontPushBtn, 1, 0, 1, 1);
  20. gridLayout->addWidget(inputPushBtn, 1, 1, 1, 1);
  21. gridLayout->addWidget(pagePushBtn, 1, 2, 1, 1);
  22. gridLayout->addWidget(progressPushBtn, 2, 0, 1, 1);
  23. gridLayout->addWidget(printPushBtn, 2, 1, 1, 1);
  24. gridLayout->addWidget(displayTextEdit, 3, 0, 3, 3);
  25. setLayout(gridLayout);
  26.  connect(colorPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  27.  connect(errorPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  28. connect(filePushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  29.  connect(fontPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  30. connect(inputPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  31.  connect(pagePushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  32. connect(progressPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  33. connect(printPushBtn, SIGNAL(clicked()), this, SLOT(doPushBtn()));
  34. setWindowTitle(tr("內建对话框"));
  35. resize(400, 300);
  36. }
  37. void CBuiltinDlg::doPushBtn()
  38. {
  39. QPushButton* btn = qobject_cast<QPushButton*>(sender());
  40. if(btn == colorPushBtn)
  41. {// 颜色对话框.
  42. QPalette palette = displayTextEdit->palette();
  43. const QColor& color 
  44. = QColorDialog::getColor(palette.color(QPalette::Base), this);
  45. if(color.isValid())
  46. {
  47. palette.setColor(QPalette::Base, color);
  48. displayTextEdit->setPalette(palette);
  49. }
  50. }
  51. else if(btn == errorPushBtn)
  52. {// 错误信息框.
  53. QErrorMessage box(this);
  54. box.setWindowTitle(tr("错误信息框"));
  55. box.showMessage(tr("错误信息框实例xx。"));
  56. box.showMessage(tr("错误信息框实例xx。"));
  57. box.showMessage(tr("错误信息框实例xx。"));
  58. box.showMessage(tr("错误信息框实例yy。"));
  59. box.showMessage(tr("错误信息框实例zz。"));
  60. box.exec();
  61. }
  62. else if(btn == filePushBtn)
  63. {// 文件对话框.
  64. QString fileName = QFileDialog::getOpenFileName(this, 
  65.             tr("打开文件"),
  66.                                                                    "/usr/local/Trolltech",
  67.                                                                    tr("任何文件(*.*)"
  68.                                                                      ";;文本文件(*.txt)"
  69. ";;XML文件(*.xml)"));
  70. displayTextEdit->setText(fileName);
  71. }
  72. else if(btn == fontPushBtn)
  73. {// 字体对话框.
  74. bool ok;
  75. const QFont& font = QFontDialog::getFont(&ok,
  76. displayTextEdit->font(),
  77. this,
  78. tr("字体对话框"));
  79. if(ok)
  80. {// 如果<确定>,设置字体.
  81. displayTextEdit->setFont(font);
  82. }
  83. }
  84. else if(btn == inputPushBtn)
  85. {// 输入对话框.
  86. bool ok;
  87.      QString text = QInputDialog::getText(this, 
  88. tr("输入对话框"),
  89.                                           tr("输入文本:"), 
  90. QLineEdit::Normal,
  91.                                           QDir::home().dirName(), 
  92. &ok);
  93.      if (ok && !text.isEmpty())
  94.          displayTextEdit->setText(text);
  95. }
  96. else if(btn == pagePushBtn)
  97. {// 页设置对话框.
  98. QPrinter printer;
  99. QPageSetupDialog dlg(&printer, this);
  100. dlg.setWindowTitle(tr("页设置对话框"));
  101. if (dlg.exec() == QDialog::Accepted) 
  102. {
  103. // 进行下一步的处理。
  104.  }
  105. } 
  106. else if(btn == progressPushBtn)
  107. {// 进度对话框.
  108. QProgressDialog progress(tr("正在复制文件..."), tr("取消"), 0, 10000, this);
  109. progress.setWindowModality(Qt::WindowModal);
  110. progress.setWindowTitle(tr("进度对话框"));
  111. progress.show();
  112. for (int i = 0; i < 10000; i++) 
  113. {
  114. progress.setValue(i);
  115. qApp->processEvents();
  116. if (progress.wasCanceled())
  117. break;
  118. //... 复制文件处理。
  119. qDebug() << i;
  120. }
  121. progress.setValue(10000);
  122. }
  123. else if(btn == printPushBtn)
  124. {// 打印对话框.
  125. QPrinter printer;
  126. QPrintDialog dlg(&printer, this);
  127. dlg.setWindowTitle(tr("打印对话框"));
  128. if (dlg.exec() == QDialog::Accepted) 
  129. {
  130. // 进行下一步的处理。
  131.  }
  132. }
源文件中只实现了两个函数,构造函数和按钮响应函数.
构造函数主要实现了,按钮和文本编辑框的创建,控件的布局,把所有的按钮的信号都连接到doPushBtn()槽上.
doPushBtn()函数比较重要的是如何判断按下的是哪个按钮.
sender()返回一个信号源指针,  然后给它投射成特定的指针qobject_cast<QPushButton *> 这样就有了发射按钮的指针.
 
原创粉丝点击