Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1205276
  • 博文数量: 232
  • 博客积分: 7563
  • 博客等级: 少将
  • 技术积分: 1930
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-21 11:17
文章分类

全部博文(232)

文章存档

2011年(17)

2010年(90)

2009年(66)

2008年(59)

分类:

2010-11-03 09:43:20

QT通用对话框,代码来自《精通QT4编程》,方便日后查询。

    main.cpp

   

  1. #include   
  2. #include   
  3. #include "dialogbuildin.h"  
  4.   
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication app(argc, argv);  
  8.   
  9.     QTextCodec* pTextCodec = QTextCodec::codecForLocale();  
  10.     QTextCodec::setCodecForTr(pTextCodec);  
  11.   
  12.     CDialogBuildin dlg;  
  13.   
  14.     return dlg.exec();  
  15. }  

    dialogbuildin.h

   

  1. #pragma once  
  2.   
  3. #include   
  4.   
  5. class QTextEdit;  
  6. class QPushButton;  
  7. class CDialogBuildin : public QDialog  
  8. {  
  9.     Q_OBJECT  
  10.   
  11. public:  
  12.     CDialogBuildin(QWidget *parent = 0);  
  13.     virtual ~CDialogBuildin();  
  14.   
  15. private:  
  16.     QTextEdit*      m_pTextEditDisplay;  
  17.     QPushButton*    m_pPushBtnColor;  
  18.     QPushButton*    m_pPushBtnError;  
  19.     QPushButton*    m_pPushBtnFile;  
  20.     QPushButton*    m_pPushBtnFont;  
  21.     QPushButton*    m_pPushBtnInput;  
  22.     QPushButton*    m_pPushBtnPage;  
  23.     QPushButton*    m_pPushBtnProgress;  
  24.     QPushButton*    m_pPushBtnPrint;  
  25.   
  26. private slots:  
  27.     void    doPushBtn();  
  28. };  

    dialogbuildin.cpp

   

  1. #include "dialogbuildin.h"  
  2. #include   
  3.   
  4. CDialogBuildin::CDialogBuildin(QWidget *parent)  
  5.     : QDialog(parent)  
  6. {  
  7.     m_pTextEditDisplay = new QTextEdit(tr("QT的标准通用对话框。"));  
  8.   
  9.     QGridLayout* pGridLayout = new QGridLayout();  
  10.   
  11.     m_pPushBtnColor = new QPushButton(tr("颜色对话框"));  
  12.     m_pPushBtnError = new QPushButton(tr("错误消息框"));  
  13.     m_pPushBtnFile = new QPushButton(tr("文件对话框"));  
  14.     m_pPushBtnFont = new QPushButton(tr("字体对话框"));  
  15.     m_pPushBtnInput = new QPushButton(tr("输入对话框"));  
  16.     m_pPushBtnPage = new QPushButton(tr("页设置对话框"));  
  17.     m_pPushBtnProgress = new QPushButton(tr("进度对话框"));  
  18.     m_pPushBtnPrint = new QPushButton(tr("打印对话框"));  
  19.   
  20.     pGridLayout->addWidget(m_pPushBtnColor,0,0,1,1);  
  21.     pGridLayout->addWidget(m_pPushBtnError,0,1,1,1);  
  22.     pGridLayout->addWidget(m_pPushBtnFile,0,2,1,1);  
  23.     pGridLayout->addWidget(m_pPushBtnFont,1,0,1,1);  
  24.     pGridLayout->addWidget(m_pPushBtnInput,1,1,1,1);  
  25.     pGridLayout->addWidget(m_pPushBtnPage,1,2,1,1);  
  26.     pGridLayout->addWidget(m_pPushBtnProgress,2,0,1,1);  
  27.     pGridLayout->addWidget(m_pPushBtnPrint,2,1,1,1);  
  28.     pGridLayout->addWidget(m_pTextEditDisplay,3,0,3,3);  
  29.   
  30.     setLayout(pGridLayout);  
  31.   
  32.     connect(m_pPushBtnColor,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  33.     connect(m_pPushBtnError,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  34.     connect(m_pPushBtnFile,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  35.     connect(m_pPushBtnFont,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  36.     connect(m_pPushBtnInput,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  37.     connect(m_pPushBtnPage,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  38.     connect(m_pPushBtnProgress,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  39.     connect(m_pPushBtnPrint,SIGNAL(clicked()),this,SLOT(doPushBtn()));  
  40.   
  41.     setWindowTitle(tr("内建对话框"));  
  42.     resize(400,300);  
  43. }  
  44.   
  45. CDialogBuildin::~CDialogBuildin()  
  46. {  
  47.   
  48. }  
  49.   
  50. void CDialogBuildin::doPushBtn()  
  51. {  
  52.     QPushButton* btn = qobject_cast(sender());  
  53.     if(btn == m_pPushBtnColor)  
  54.     {  
  55.         // 颜色对话框  
  56.         // 获取文本编辑框对象的调色板  
  57.         QPalette palette = m_pTextEditDisplay->palette();  
  58.   
  59.         // 通过QColorDialog的静态函数getColor创建一个模态的颜色对话框  
  60.         // 第一个参数为颜色对话框显示的初始颜色值  
  61.         // 第二个参数为颜色对话框的父窗口  
  62.         // 若点击"取消"将返回一个无效的颜色,否则将返回选择的颜色值  
  63.         const QColor& color = QColorDialog::getColor(palette.color(QPalette::Base),this);  
  64.   
  65.         // 判断颜色是否有效  
  66.         if(color.isValid())  
  67.         {  
  68.             // 修改调色板中的颜色组  
  69.             palette.setColor(QPalette::Base,color);  
  70.             m_pTextEditDisplay->setPalette(palette);  
  71.         }  
  72.     }  
  73.     else if(btn == m_pPushBtnError)  
  74.     {  
  75.         // 错误对话框  
  76.         QErrorMessage box(this);  
  77.         box.setWindowTitle(tr("错误消息框"));  
  78.         box.showMessage(tr("错误消息框实例xx."));  
  79.         box.showMessage(tr("错误消息框实例yy."));  
  80.         box.showMessage(tr("错误消息框实例zz."));  
  81.         box.showMessage(tr("错误消息框实例wu."));  
  82.         box.showMessage(tr("错误消息框实例ya."));  
  83.         box.exec();  
  84.     }  
  85.     else if(btn == m_pPushBtnFile)  
  86.     {  
  87.         // 文件对话框  
  88.         // 通过QFileDialog的静态函数getOpenFileName返回选择的文件路径  
  89.         /** 
  90.  
  91.         QString strFilePath = QFileDialog::getOpenFileName(this,tr("打开文件"),QString(), 
  92.             tr("任何文件(*.*)"";;文本文件(*.txt)"";;XML文件(*.xml)")); 
  93.  
  94.         */  
  95.         QFileDialog dlg;  
  96.         dlg.setViewMode(QFileDialog::Detail);  
  97.         dlg.setFileMode(QFileDialog::ExistingFiles);  
  98.         dlg.setAcceptMode(QFileDialog::AcceptOpen);  
  99.         dlg.setFilter(tr("任何文件(*.*)"";;文本文件(*.txt)"";;XML文件(*.xml)"));  
  100.         dlg.setWindowTitle(tr("打开文件"));  
  101.         dlg.setResolveSymlinks(false);  
  102.         dlg.setNameFilterDetailsVisible(false);  
  103.   
  104.         QStringList strListFilePath;  
  105.         QString strFilePath;  
  106.         if(dlg.exec() == QDialog::Accepted)  
  107.         {  
  108.             strListFilePath = dlg.selectedFiles();  
  109.             strFilePath = strListFilePath.first();  
  110.         }  
  111.   
  112.         m_pTextEditDisplay->setText(strFilePath);  
  113.     }  
  114.     else if(btn == m_pPushBtnFont)  
  115.     {  
  116.         // 字体对话框  
  117.         bool bok;  
  118.         const QFont& font = QFontDialog::getFont(&bok,m_pTextEditDisplay->font(),this,tr("字体对话框"));  
  119.   
  120.         if(bok)  
  121.         {  
  122.             // 如果是确定,设置字体  
  123.             m_pTextEditDisplay->setFont(font);  
  124.         }  
  125.     }  
  126.     else if(btn == m_pPushBtnInput)  
  127.     {  
  128.         // 输入对话框  
  129.         bool ok;  
  130.         QString text = QInputDialog::getText(this,tr("输入对话框"),tr("输入文本:"),QLineEdit::Normal,QDir::home().dirName(),&ok);  
  131.   
  132.         if(ok && !text.isEmpty())  
  133.             m_pTextEditDisplay->setText(text);  
  134.     }  
  135.     else if(btn == m_pPushBtnPage)  
  136.     {  
  137.         // 页设置对话框  
  138.         QPrinter printer;  
  139.         QPageSetupDialog dlg(&printer,this);  
  140.         dlg.setWindowTitle(tr("页设置对话框"));  
  141.         if(dlg.exec() == QDialog::Accepted)  
  142.         {  
  143.             // 进行下一步处理  
  144.         }  
  145.     }  
  146.     else if(btn == m_pPushBtnProgress)  
  147.     {  
  148.         // 进度对话框  
  149.         QProgressDialog progress(tr("正在复制文件..."),  
  150.             tr("取消"),  
  151.             0,  
  152.             10000,  
  153.             this);  
  154.   
  155.         progress.setWindowModality(Qt::WindowModal);        ///< 设置进度条对话框显示模式为模态对话框  
  156.         progress.setWindowTitle(tr("进度对话框"));  
  157.         progress.show();  
  158.   
  159.         for(int i=0;i<10000;++i)  
  160.         {  
  161.             progress.setValue(i);       ///< 设置进度条当前值  
  162.   
  163.             // 模态对话框必须调用,以保证事件循环还可以处理其他事件,以防止应用程序因为长时间的操作而导致没有反应  
  164.             // 或调用 QEventLoop::processEvents(QEventLoop::ExcludeUserInputEvents)  
  165.             // 1> qApp->processEvents();  
  166.             // 2>  
  167.             QEventLoop EventLoop;  
  168.             EventLoop.processEvents(QEventLoop::ExcludeUserInputEvents);  
  169.   
  170.             if(progress.wasCanceled())  ///< 判断进度条是否点了“取消”按钮  
  171.                 break;  
  172.   
  173.             //... 复制文件处理  
  174.             qDebug() << i;  
  175.         }  
  176.   
  177.         progress.setValue(10000);       ///< 进度条达到最大值,将自动关闭对话框  
  178.     }  
  179.     else if(btn == m_pPushBtnPrint)  
  180.     {  
  181.         // 打印对话框  
  182.         QPrinter printer;  
  183.         QPrintDialog dlg(&printer,this);  
  184.         dlg.setWindowTitle(tr("打印对话框"));  
  185.         if(dlg.exec() == QDialog::Accepted)  
  186.         {  
  187.             // 进行下一步处理  
  188.         }  
  189.     }  

阅读(3678) | 评论(1) | 转发(0) |
0

上一篇:Qt Designer使用简易教程

下一篇:locale 详解

给主人留下些什么吧!~~

chinaunix网友2010-11-03 16:17:51

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com