中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT之字體、進度、打印對話框(十八)

發布時間:2020-08-05 13:34:24 來源:網絡 閱讀:2607 作者:上帝之子521 欄目:開發技術

????????在上節博客中我們介紹了顏色對話框。那么在日常生活中,除了顏色對話框,我們經常見到的還有字體對話框、進度對話框以及打印對話框。本節我們就來介紹下在 QT 中這三個對話框分別是怎樣實現的。

????????我們首先建立一個帶有 FontDialogBtn、ProgressDialogBtn、PrintDialogBtn 三個 QPushButton 按鈕的界面,來分別實現字體對話框、進度對話框以及打印對話框,代碼如下:

????????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()
{

}

????????我們構建后,發現出現一個錯誤,說 QPrintDialog 頭文件沒定義,可是我們在幫助里查到 QPrintDialog 是在這個頭文件里定義的,那么為什么會報錯呢?經過仔細查看,在包含頭文件下面有

qmake:

QT += printsupport

這么一行話,我們就在 test.pro 文件里加上這句,那么下面我們構建既不會出錯了。運行之后出現我們期待的界面,如下:

QT之字體、進度、打印對話框(十八)

????????但是我們點擊之后,并沒有什么反應。當然了,對應函數的內容還沒有實現呢。下來我們就來一一實現這三個對話框。

????????我們就先來實現第一個字體對話框。首先在 Qt 中提供了預定義的字體對話框 QFontDialog 類, QFontDialog 類用于提供選擇字體的對話框部件。字體對話框的使用方式大體如下:

QT之字體、進度、打印對話框(十八)

????????具體到代碼就是:

void?Widget::FontDialogBtn_Clicked()
{
???QFontDialog?dlg(this);

???dlg.setWindowTitle("Font?Dialog?Test");
???dlg.setCurrentFont(QFont("Courier?New",?10,?QFont::Bold));??//?設置屬性:名字為Courier?New,大小為10,類型為Bold

???if(?dlg.exec()?==?QFontDialog::Accepted?)
???{
???????qDebug()?<<?dlg.selectedFont();
???}
}

????????構建運行后,得到的效果圖如下:

? QT之字體、進度、打印對話框(十八)

????????那么我們得到的屬性是不是和上面我們設置的一樣呢?我們點擊OK,打印出來的屬性如下所示:

QT之字體、進度、打印對話框(十八)

????????接下來我們就來實現進度對話框,那么在 Qt 中也提供了預定義的進度對話框 QProgressDialog 類,QProgressDialog 類用于顯示進度信息,QProgressDialog 類用于需要用戶等待的場合。那么我們進度對話框的使用大體流程如下:

QT之字體、進度、打印對話框(十八)

????????具體代碼如下:

void?Widget::ProgressDialogBtn_Clicked()
{
????QProgressDialog?dlg(this);

????dlg.setWindowTitle("Updating...");??//?設置名字
????dlg.setLabelText("Downloading?update?from?server...");??//?設置對話框信息
????dlg.setMinimum(0);??????//?設置最小值
????dlg.setMaximum(100);????//?設置最大值
????dlg.setValue(35);???????//?設置進度條信息

????dlg.exec();
}

????????構建運行后得到如圖所示的進度對話框:

QT之字體、進度、打印對話框(十八)

????????接下來我們繼續實現打印對話框。那么在 Qt 中也提供了預定義的打印對話框 QPrintDialog 類,QPrintDialog 類用于設置打印相關的參數信息。Qt 中的?QPrinter 類是打印設備及其參數的封裝QPrinter 類封裝了系統中打印設備的驅動接口QPrinter 以相同方式使用系統中的不同打印設備

打印對話框的大體使用流程如下:

QT之字體、進度、打印對話框(十八)

????????具體到代碼入如下:

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!");????//?文件內容是Printer?object?test!

????????p->setOutputFileName("F:\\test.pdf");???//?在F盤生成test.pdf文件

????????td.print(p);
????}
}

????????在這里我們使用的虛擬打印機,選擇PDF格式的,得到的效果圖如下:

QT之字體、進度、打印對話框(十八)

????????我們打開F盤,如下,我們發現文件生成的時間就是剛才。再打開看下內容就是我們剛設置的。

QT之字體、進度、打印對話框(十八)

QT之字體、進度、打印對話框(十八)

????????我們還可以再做個試驗,加上 td.setHtml("<h2>Print html object test</hl>"); 這句,再將文件類型改成 .xps 格式的。構建運行,選擇 XPS 虛擬打印機進行打印,如下:

QT之字體、進度、打印對話框(十八)

????????我們再到F盤看看,生成 text.xps 文件,內容和剛才一樣。如下:

QT之字體、進度、打印對話框(十八)QT之字體、進度、打印對話框(十八)

?????????那么我們今天學習了字體對話框、進度對話框以及打印對話框三種對話框的相關知識,那么在 Qt 中標準對話框的設計模式就是:1、GUI界面部件產生數據對象;2、業務邏輯中的其它對象使用數據對象;3、GUI界面與業務邏輯用過數據對象鏈接。今天的學習就到此啦,后面我們繼續學習 Qt 相關的知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳泉市| 二连浩特市| 台南市| 宁河县| 迁安市| 黑水县| 镇雄县| 营口市| 北海市| 漳浦县| 宜宾县| 武义县| 凤翔县| 南涧| 曲阳县| 蕉岭县| 石景山区| 余江县| 罗源县| 奉新县| 达州市| 徐闻县| 秭归县| 玉溪市| 公安县| 揭东县| 大石桥市| 新绛县| 湾仔区| 新龙县| 望城县| 五寨县| 蓬溪县| 镇赉县| 绥中县| 渭南市| 湖州市| 宜宾市| 阿克苏市| 都昌县| 米林县|