您好,登錄后才能下訂單哦!
????????在上節(jié)博客中我們介紹了顏色對(duì)話框。那么在日常生活中,除了顏色對(duì)話框,我們經(jīng)常見(jiàn)到的還有字體對(duì)話框、進(jìn)度對(duì)話框以及打印對(duì)話框。本節(jié)我們就來(lái)介紹下在 QT 中這三個(gè)對(duì)話框分別是怎樣實(shí)現(xiàn)的。
????????我們首先建立一個(gè)帶有 FontDialogBtn、ProgressDialogBtn、PrintDialogBtn 三個(gè) QPushButton 按鈕的界面,來(lái)分別實(shí)現(xiàn)字體對(duì)話框、進(jìn)度對(duì)話框以及打印對(duì)話框,代碼如下:
????????Widget.h 如下所示:
#include?<QWidget>#include?<QPushButton> class?Widget?:?public?QWidget { ????Q_OBJECT private: ????QPushButton?FontDialogBtn; ????QPushButton?ProgressDialogBtn; ????QPushButton?PrintDialogBtn; private?slots: ????void?FontDialogBtn_Clicked(); ????void?ProgressDialogBtn_Clicked(); ????void?PrintDialogBtn_Clicked(); public: ????Widget(QWidget?*parent?=?0); ????~Widget(); };
????????Widget.cpp 如下所示:
#include?"Widget.h" #include?<QDebug> #include?<QTextDocument> #include?<QPrinter> #include?<QPrintDialog> #include?<QProgressDialog> #include?<QFontDialog> Widget::Widget(QWidget?*parent)?:?QWidget(parent), ????FontDialogBtn(this),?ProgressDialogBtn(this),?PrintDialogBtn(this) { ????FontDialogBtn.setText("Font?Dialog"); ????FontDialogBtn.move(20,?20); ????FontDialogBtn.resize(160,?30); ????ProgressDialogBtn.setText("Progress?Dialog"); ????ProgressDialogBtn.move(20,?70); ????ProgressDialogBtn.resize(160,?30); ????PrintDialogBtn.setText("Print?Dialog"); ????PrintDialogBtn.move(20,?120); ????PrintDialogBtn.resize(160,?30); ????resize(200,?170); ????setFixedSize(200,?170); ????connect(&FontDialogBtn,?SIGNAL(clicked()),?this,?SLOT(FontDialogBtn_Clicked())); ????connect(&ProgressDialogBtn,?SIGNAL(clicked()),?this,?SLOT(ProgressDialogBtn_Clicked())); ????connect(&PrintDialogBtn,?SIGNAL(clicked()),?this,?SLOT(PrintDialogBtn_Clicked())); } void?Widget::FontDialogBtn_Clicked() { } void?Widget::ProgressDialogBtn_Clicked() { } void?Widget::PrintDialogBtn_Clicked() { } Widget::~Widget() { }
????????我們構(gòu)建后,發(fā)現(xiàn)出現(xiàn)一個(gè)錯(cuò)誤,說(shuō) QPrintDialog 頭文件沒(méi)定義,可是我們?cè)趲椭锊榈?QPrintDialog 是在這個(gè)頭文件里定義的,那么為什么會(huì)報(bào)錯(cuò)呢?經(jīng)過(guò)仔細(xì)查看,在包含頭文件下面有
qmake: | QT += printsupport |
這么一行話,我們就在 test.pro 文件里加上這句,那么下面我們構(gòu)建既不會(huì)出錯(cuò)了。運(yùn)行之后出現(xiàn)我們期待的界面,如下:
????????但是我們點(diǎn)擊之后,并沒(méi)有什么反應(yīng)。當(dāng)然了,對(duì)應(yīng)函數(shù)的內(nèi)容還沒(méi)有實(shí)現(xiàn)呢。下來(lái)我們就來(lái)一一實(shí)現(xiàn)這三個(gè)對(duì)話框。
????????我們就先來(lái)實(shí)現(xiàn)第一個(gè)字體對(duì)話框。首先在 Qt 中提供了預(yù)定義的字體對(duì)話框 QFontDialog 類, QFontDialog 類用于提供選擇字體的對(duì)話框部件。字體對(duì)話框的使用方式大體如下:
????????具體到代碼就是:
void?Widget::FontDialogBtn_Clicked() { ???QFontDialog?dlg(this); ???dlg.setWindowTitle("Font?Dialog?Test"); ???dlg.setCurrentFont(QFont("Courier?New",?10,?QFont::Bold));??//?設(shè)置屬性:名字為Courier?New,大小為10,類型為Bold ???if(?dlg.exec()?==?QFontDialog::Accepted?) ???{ ???????qDebug()?<<?dlg.selectedFont(); ???} }
????????構(gòu)建運(yùn)行后,得到的效果圖如下:
?
????????那么我們得到的屬性是不是和上面我們?cè)O(shè)置的一樣呢?我們點(diǎn)擊OK,打印出來(lái)的屬性如下所示:
????????接下來(lái)我們就來(lái)實(shí)現(xiàn)進(jìn)度對(duì)話框,那么在 Qt 中也提供了預(yù)定義的進(jìn)度對(duì)話框 QProgressDialog 類,QProgressDialog 類用于顯示進(jìn)度信息,QProgressDialog 類用于需要用戶等待的場(chǎng)合。那么我們進(jìn)度對(duì)話框的使用大體流程如下:
????????具體代碼如下:
void?Widget::ProgressDialogBtn_Clicked() { ????QProgressDialog?dlg(this); ????dlg.setWindowTitle("Updating...");??//?設(shè)置名字 ????dlg.setLabelText("Downloading?update?from?server...");??//?設(shè)置對(duì)話框信息 ????dlg.setMinimum(0);??????//?設(shè)置最小值 ????dlg.setMaximum(100);????//?設(shè)置最大值 ????dlg.setValue(35);???????//?設(shè)置進(jìn)度條信息 ????dlg.exec(); }
????????構(gòu)建運(yùn)行后得到如圖所示的進(jìn)度對(duì)話框:
????????接下來(lái)我們繼續(xù)實(shí)現(xiàn)打印對(duì)話框。那么在 Qt 中也提供了預(yù)定義的打印對(duì)話框 QPrintDialog 類,QPrintDialog 類用于設(shè)置打印相關(guān)的參數(shù)信息。Qt 中的?QPrinter 類是打印設(shè)備及其參數(shù)的封裝,QPrinter 類封裝了系統(tǒng)中打印設(shè)備的驅(qū)動(dòng)接口,QPrinter 以相同方式使用系統(tǒng)中的不同打印設(shè)備。
打印對(duì)話框的大體使用流程如下:
????????具體到代碼入如下:
void?Widget::PrintDialogBtn_Clicked() { ????QPrintDialog?dlg(this); ????dlg.setWindowTitle("Print?Dialog?Test"); ????if(?dlg.exec()?==?QPrintDialog::Accepted?) ????{ ????????QPrinter*?p?=?dlg.printer(); ????????QTextDocument?td; ????????td.setPlainText("Printer?object?test!");????//?文件內(nèi)容是Printer?object?test! ????????p->setOutputFileName("F:\\test.pdf");???//?在F盤生成test.pdf文件 ????????td.print(p); ????} }
????????在這里我們使用的虛擬打印機(jī),選擇PDF格式的,得到的效果圖如下:
????????我們打開(kāi)F盤,如下,我們發(fā)現(xiàn)文件生成的時(shí)間就是剛才。再打開(kāi)看下內(nèi)容就是我們剛設(shè)置的。
????????我們還可以再做個(gè)試驗(yàn),加上 td.setHtml("<h2>Print html object test</hl>"); 這句,再將文件類型改成 .xps 格式的。構(gòu)建運(yùn)行,選擇 XPS 虛擬打印機(jī)進(jìn)行打印,如下:
????????我們?cè)俚紽盤看看,生成 text.xps 文件,內(nèi)容和剛才一樣。如下:
?????????那么我們今天學(xué)習(xí)了字體對(duì)話框、進(jìn)度對(duì)話框以及打印對(duì)話框三種對(duì)話框的相關(guān)知識(shí),那么在 Qt 中標(biāo)準(zhǔn)對(duì)話框的設(shè)計(jì)模式就是:1、GUI界面部件產(chǎn)生數(shù)據(jù)對(duì)象;2、業(yè)務(wù)邏輯中的其它對(duì)象使用數(shù)據(jù)對(duì)象;3、GUI界面與業(yè)務(wù)邏輯用過(guò)數(shù)據(jù)對(duì)象鏈接。今天的學(xué)習(xí)就到此啦,后面我們繼續(xù)學(xué)習(xí) Qt 相關(guān)的知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。