QT通用對話方塊,代碼來自《精通QT4編程》,方便日後查詢。

來源:互聯網
上載者:User

main.cpp

#include <QtGui/QApplication><br />#include <QtCore/QTextCodec><br />#include "dialogbuildin.h" </p><p>int main(int argc, char *argv[])<br />{<br /> QApplication app(argc, argv); </p><p> QTextCodec* pTextCodec = QTextCodec::codecForLocale();<br /> QTextCodec::setCodecForTr(pTextCodec); </p><p> CDialogBuildin dlg; </p><p> return dlg.exec();<br />} </p><p>

dialogbuildin.h

#pragma once </p><p>#include <QDialog> </p><p>class QTextEdit;<br />class QPushButton;<br />class CDialogBuildin : public QDialog<br />{<br /> Q_OBJECT </p><p>public:<br /> CDialogBuildin(QWidget *parent = 0);<br /> virtual ~CDialogBuildin(); </p><p>private:<br /> QTextEdit* m_pTextEditDisplay;<br /> QPushButton* m_pPushBtnColor;<br /> QPushButton* m_pPushBtnError;<br /> QPushButton* m_pPushBtnFile;<br /> QPushButton* m_pPushBtnFont;<br /> QPushButton* m_pPushBtnInput;<br /> QPushButton* m_pPushBtnPage;<br /> QPushButton* m_pPushBtnProgress;<br /> QPushButton* m_pPushBtnPrint; </p><p>private slots:<br /> void doPushBtn();<br />};<br />

   dialogbuildin.cpp

#include "dialogbuildin.h"<br />#include <QtGui/QtGui> </p><p>CDialogBuildin::CDialogBuildin(QWidget *parent)<br /> : QDialog(parent)<br />{<br /> m_pTextEditDisplay = new QTextEdit(tr("QT的標準通用對話方塊。")); </p><p> QGridLayout* pGridLayout = new QGridLayout(); </p><p> m_pPushBtnColor = new QPushButton(tr("顏色對話方塊"));<br /> m_pPushBtnError = new QPushButton(tr("錯誤訊息框"));<br /> m_pPushBtnFile = new QPushButton(tr("檔案對話方塊"));<br /> m_pPushBtnFont = new QPushButton(tr("字型對話方塊"));<br /> m_pPushBtnInput = new QPushButton(tr("輸入對話方塊"));<br /> m_pPushBtnPage = new QPushButton(tr("頁設定對話方塊"));<br /> m_pPushBtnProgress = new QPushButton(tr("進度對話方塊"));<br /> m_pPushBtnPrint = new QPushButton(tr("列印對話方塊")); </p><p> pGridLayout->addWidget(m_pPushBtnColor,0,0,1,1);<br /> pGridLayout->addWidget(m_pPushBtnError,0,1,1,1);<br /> pGridLayout->addWidget(m_pPushBtnFile,0,2,1,1);<br /> pGridLayout->addWidget(m_pPushBtnFont,1,0,1,1);<br /> pGridLayout->addWidget(m_pPushBtnInput,1,1,1,1);<br /> pGridLayout->addWidget(m_pPushBtnPage,1,2,1,1);<br /> pGridLayout->addWidget(m_pPushBtnProgress,2,0,1,1);<br /> pGridLayout->addWidget(m_pPushBtnPrint,2,1,1,1);<br /> pGridLayout->addWidget(m_pTextEditDisplay,3,0,3,3); </p><p> setLayout(pGridLayout); </p><p> connect(m_pPushBtnColor,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnError,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnFile,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnFont,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnInput,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnPage,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnProgress,SIGNAL(clicked()),this,SLOT(doPushBtn()));<br /> connect(m_pPushBtnPrint,SIGNAL(clicked()),this,SLOT(doPushBtn())); </p><p> setWindowTitle(tr("內建對話方塊"));<br /> resize(400,300);<br />} </p><p>CDialogBuildin::~CDialogBuildin()<br />{ </p><p>} </p><p>void CDialogBuildin::doPushBtn()<br />{<br /> QPushButton* btn = qobject_cast<QPushButton*>(sender());<br /> if(btn == m_pPushBtnColor)<br /> {<br /> // 顏色對話方塊<br /> // 擷取文本編輯框對象的調色盤<br /> QPalette palette = m_pTextEditDisplay->palette(); </p><p> // 通過QColorDialog的靜態函數getColor建立一個模態的顏色對話方塊<br /> // 第一個參數為顏色對話方塊顯示的初始顏色值<br /> // 第二個參數為顏色對話方塊的父視窗<br /> // 若點擊"取消"將返回一個無效的顏色,否則將返回選擇的顏色值<br /> const QColor& color = QColorDialog::getColor(palette.color(QPalette::Base),this); </p><p> // 判斷顏色是否有效<br /> if(color.isValid())<br /> {<br /> // 修改調色盤中的顏色組<br /> palette.setColor(QPalette::Base,color);<br /> m_pTextEditDisplay->setPalette(palette);<br /> }<br /> }<br /> else if(btn == m_pPushBtnError)<br /> {<br /> // 錯誤對話方塊<br /> QErrorMessage box(this);<br /> box.setWindowTitle(tr("錯誤訊息框"));<br /> box.showMessage(tr("錯誤訊息框執行個體xx."));<br /> box.showMessage(tr("錯誤訊息框執行個體yy."));<br /> box.showMessage(tr("錯誤訊息框執行個體zz."));<br /> box.showMessage(tr("錯誤訊息框執行個體wu."));<br /> box.showMessage(tr("錯誤訊息框執行個體ya."));<br /> box.exec();<br /> }<br /> else if(btn == m_pPushBtnFile)<br /> {<br /> // 檔案對話方塊<br /> // 通過QFileDialog的靜態函數getOpenFileName返回選擇的檔案路徑<br /> /** </p><p> QString strFilePath = QFileDialog::getOpenFileName(this,tr("開啟檔案"),QString(),<br /> tr("任何檔案(*.*)"";;文字檔(*.txt)"";;XML檔案(*.xml)")); </p><p> */<br /> QFileDialog dlg;<br /> dlg.setViewMode(QFileDialog::Detail);<br /> dlg.setFileMode(QFileDialog::ExistingFiles);<br /> dlg.setAcceptMode(QFileDialog::AcceptOpen);<br /> dlg.setFilter(tr("任何檔案(*.*)"";;文字檔(*.txt)"";;XML檔案(*.xml)"));<br /> dlg.setWindowTitle(tr("開啟檔案"));<br /> dlg.setResolveSymlinks(false);<br /> dlg.setNameFilterDetailsVisible(false); </p><p> QStringList strListFilePath;<br /> QString strFilePath;<br /> if(dlg.exec() == QDialog::Accepted)<br /> {<br /> strListFilePath = dlg.selectedFiles();<br /> strFilePath = strListFilePath.first();<br /> } </p><p> m_pTextEditDisplay->setText(strFilePath);<br /> }<br /> else if(btn == m_pPushBtnFont)<br /> {<br /> // 字型對話方塊<br /> bool bok;<br /> const QFont& font = QFontDialog::getFont(&bok,m_pTextEditDisplay->font(),this,tr("字型對話方塊")); </p><p> if(bok)<br /> {<br /> // 如果是確定,設定字型<br /> m_pTextEditDisplay->setFont(font);<br /> }<br /> }<br /> else if(btn == m_pPushBtnInput)<br /> {<br /> // 輸入對話方塊<br /> bool ok;<br /> QString text = QInputDialog::getText(this,tr("輸入對話方塊"),tr("輸入文本:"),QLineEdit::Normal,QDir::home().dirName(),&ok); </p><p> if(ok && !text.isEmpty())<br /> m_pTextEditDisplay->setText(text);<br /> }<br /> else if(btn == m_pPushBtnPage)<br /> {<br /> // 頁設定對話方塊<br /> QPrinter printer;<br /> QPageSetupDialog dlg(&printer,this);<br /> dlg.setWindowTitle(tr("頁設定對話方塊"));<br /> if(dlg.exec() == QDialog::Accepted)<br /> {<br /> // 進行下一步處理<br /> }<br /> }<br /> else if(btn == m_pPushBtnProgress)<br /> {<br /> // 進度對話方塊<br /> QProgressDialog progress(tr("正在複製檔案..."),<br /> tr("取消"),<br /> 0,<br /> 10000,<br /> this); </p><p> progress.setWindowModality(Qt::WindowModal); ///< 設定進度條對話方塊顯示模式為模態對話方塊<br /> progress.setWindowTitle(tr("進度對話方塊"));<br /> progress.show(); </p><p> for(int i=0;i<10000;++i)<br /> {<br /> progress.setValue(i); ///< 設定進度條當前值 </p><p> // 模態對話方塊必須調用,以保證事件迴圈還可以處理其他事件,以防止應用程式因為長時間的操作而導致沒有反應<br /> // 或調用 QEventLoop::processEvents(QEventLoop::ExcludeUserInputEvents)<br /> // 1> qApp->processEvents();<br /> // 2><br /> QEventLoop EventLoop;<br /> EventLoop.processEvents(QEventLoop::ExcludeUserInputEvents); </p><p> if(progress.wasCanceled()) ///< 判斷進度條是否點了“取消”按鈕<br /> break; </p><p> //... 複製檔案處理<br /> qDebug() << i;<br /> } </p><p> progress.setValue(10000); ///< 進度條達到最大值,將自動關閉對話方塊<br /> }<br /> else if(btn == m_pPushBtnPrint)<br /> {<br /> // 列印對話方塊<br /> QPrinter printer;<br /> QPrintDialog dlg(&printer,this);<br /> dlg.setWindowTitle(tr("列印對話方塊"));<br /> if(dlg.exec() == QDialog::Accepted)<br /> {<br /> // 進行下一步處理<br /> }<br /> }<br />}</p><p>

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/alicehyxx/archive/2009/12/13/4999357.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.