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) { // 进行下一步处理 } } }