来源 http://blog.csdn.net/alicehyxx/article/details/4999357
QT通用对话框,代码来自《精通QT4编程》,方便日后查询。
main.cpp
- #include <QtGui/QApplication>
- #include <QtCore/QTextCodec>
- #include "dialogbuildin.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QTextCodec* pTextCodec = QTextCodec::codecForLocale();
- QTextCodec::setCodecForTr(pTextCodec);
- CDialogBuildin dlg;
- return dlg.exec();
- }
dialogbuildin.h
- #pragma once
- #include <QDialog>
- class QTextEdit;
- class QPushButton;
- class CDialogBuildin : public QDialog
- {
- Q_OBJECT
- public:
- CDialogBuildin(QWidget *parent = 0);
- virtual ~CDialogBuildin();
- private:
- QTextEdit* m_pTextEditDisplay;
- QPushButton* m_pPushBtnColor;
- QPushButton* m_pPushBtnError;
- QPushButton* m_pPushBtnFile;
- QPushButton* m_pPushBtnFont;
- QPushButton* m_pPushBtnInput;
- QPushButton* m_pPushBtnPage;
- QPushButton* m_pPushBtnProgress;
- QPushButton* m_pPushBtnPrint;
- private slots:
- void doPushBtn();
- };
dialogbuildin.cpp
- #include "dialogbuildin.h"
- #include <QtGui/QtGui>
- CDialogBuildin::CDialogBuildin(QWidget *parent)
- : QDialog(parent)
- {
- m_pTextEditDisplay = new QTextEdit(tr("QT的标准通用对话框。"));
- QGridLayout* pGridLayout = new QGridLayout();
- m_pPushBtnColor = new QPushButton(tr("颜色对话框"));
- m_pPushBtnError = new QPushButton(tr("错误消息框"));
- m_pPushBtnFile = new QPushButton(tr("文件对话框"));
- m_pPushBtnFont = new QPushButton(tr("字体对话框"));
- m_pPushBtnInput = new QPushButton(tr("输入对话框"));
- m_pPushBtnPage = new QPushButton(tr("页设置对话框"));
- m_pPushBtnProgress = new QPushButton(tr("进度对话框"));
- m_pPushBtnPrint = new QPushButton(tr("打印对话框"));
- pGridLayout->addWidget(m_pPushBtnColor,0,0,1,1);
- pGridLayout->addWidget(m_pPushBtnError,0,1,1,1);
- pGridLayout->addWidget(m_pPushBtnFile,0,2,1,1);
- pGridLayout->addWidget(m_pPushBtnFont,1,0,1,1);
- pGridLayout->addWidget(m_pPushBtnInput,1,1,1,1);
- pGridLayout->addWidget(m_pPushBtnPage,1,2,1,1);
- pGridLayout->addWidget(m_pPushBtnProgress,2,0,1,1);
- pGridLayout->addWidget(m_pPushBtnPrint,2,1,1,1);
- pGridLayout->addWidget(m_pTextEditDisplay,3,0,3,3);
- setLayout(pGridLayout);
- connect(m_pPushBtnColor,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnError,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnFile,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnFont,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnInput,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnPage,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnProgress,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- connect(m_pPushBtnPrint,SIGNAL(clicked()),this,SLOT(doPushBtn()));
- setWindowTitle(tr("内建对话框"));
- resize(400,300);
- }
- CDialogBuildin::~CDialogBuildin()
- {
- }
- void CDialogBuildin::doPushBtn()
- {
- QPushButton* btn = qobject_cast<QPushButton*>(sender());
- if(btn == m_pPushBtnColor)
- {
- // 颜色对话框
- // 获取文本编辑框对象的调色板
- QPalette palette = m_pTextEditDisplay->palette();
- // 通过QColorDialog的静态函数getColor创建一个模态的颜色对话框
- // 第一个参数为颜色对话框显示的初始颜色值
- // 第二个参数为颜色对话框的父窗口
- // 若点击"取消"将返回一个无效的颜色,否则将返回选择的颜色值
- const QColor& color = QColorDialog::getColor(palette.color(QPalette::Base),this);
- // 判断颜色是否有效
- if(color.isValid())
- {
- // 修改调色板中的颜色组
- palette.setColor(QPalette::Base,color);
- m_pTextEditDisplay->setPalette(palette);
- }
- }
- else if(btn == m_pPushBtnError)
- {
- // 错误对话框
- QErrorMessage box(this);
- box.setWindowTitle(tr("错误消息框"));
- box.showMessage(tr("错误消息框实例xx."));
- box.showMessage(tr("错误消息框实例yy."));
- box.showMessage(tr("错误消息框实例zz."));
- box.showMessage(tr("错误消息框实例wu."));
- box.showMessage(tr("错误消息框实例ya."));
- box.exec();
- }
- else if(btn == m_pPushBtnFile)
- {
- // 文件对话框
- // 通过QFileDialog的静态函数getOpenFileName返回选择的文件路径
- /**
- QString strFilePath = QFileDialog::getOpenFileName(this,tr("打开文件"),QString(),
- tr("任何文件(*.*)"";;文本文件(*.txt)"";;XML文件(*.xml)"));
- */
- QFileDialog dlg;
- dlg.setViewMode(QFileDialog::Detail);
- dlg.setFileMode(QFileDialog::ExistingFiles);
- dlg.setAcceptMode(QFileDialog::AcceptOpen);
- dlg.setFilter(tr("任何文件(*.*)"";;文本文件(*.txt)"";;XML文件(*.xml)"));
- dlg.setWindowTitle(tr("打开文件"));
- dlg.setResolveSymlinks(false);
- dlg.setNameFilterDetailsVisible(false);
- QStringList strListFilePath;
- QString strFilePath;
- if(dlg.exec() == QDialog::Accepted)
- {
- strListFilePath = dlg.selectedFiles();
- strFilePath = strListFilePath.first();
- }
- m_pTextEditDisplay->setText(strFilePath);
- }
- else if(btn == m_pPushBtnFont)
- {
- // 字体对话框
- bool bok;
- const QFont& font = QFontDialog::getFont(&bok,m_pTextEditDisplay->font(),this,tr("字体对话框"));
- if(bok)
- {
- // 如果是确定,设置字体
- m_pTextEditDisplay->setFont(font);
- }
- }
- else if(btn == m_pPushBtnInput)
- {
- // 输入对话框
- bool ok;
- QString text = QInputDialog::getText(this,tr("输入对话框"),tr("输入文本:"),QLineEdit::Normal,QDir::home().dirName(),&ok);
- if(ok && !text.isEmpty())
- m_pTextEditDisplay->setText(text);
- }
- else if(btn == m_pPushBtnPage)
- {
- // 页设置对话框
- QPrinter printer;
- QPageSetupDialog dlg(&printer,this);
- dlg.setWindowTitle(tr("页设置对话框"));
- if(dlg.exec() == QDialog::Accepted)
- {
- // 进行下一步处理
- }
- }
- else if(btn == m_pPushBtnProgress)
- {
- // 进度对话框
- QProgressDialog progress(tr("正在复制文件..."),
- tr("取消"),
- 0,
- 10000,
- this);
- progress.setWindowModality(Qt::WindowModal); ///< 设置进度条对话框显示模式为模态对话框
- progress.setWindowTitle(tr("进度对话框"));
- progress.show();
- for(int i=0;i<10000;++i)
- {
- progress.setValue(i); ///< 设置进度条当前值
- // 模态对话框必须调用,以保证事件循环还可以处理其他事件,以防止应用程序因为长时间的操作而导致没有反应
- // 或调用 QEventLoop::processEvents(QEventLoop::ExcludeUserInputEvents)
- // 1> qApp->processEvents();
- // 2>
- QEventLoop EventLoop;
- EventLoop.processEvents(QEventLoop::ExcludeUserInputEvents);
- if(progress.wasCanceled()) ///< 判断进度条是否点了“取消”按钮
- break;
- //... 复制文件处理
- qDebug() << i;
- }
- progress.setValue(10000); ///< 进度条达到最大值,将自动关闭对话框
- }
- else if(btn == m_pPushBtnPrint)
- {
- // 打印对话框
- QPrinter printer;
- QPrintDialog dlg(&printer,this);
- dlg.setWindowTitle(tr("打印对话框"));
- if(dlg.exec() == QDialog::Accepted)
- {
- // 进行下一步处理
- }
- }