日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Qt編程技術(shù):數(shù)據(jù)庫(kù)操作生成PDF報(bào)表 (qt 讀取數(shù)據(jù)庫(kù)生成pdf)

Qt是一個(gè)跨平臺(tái)的圖形用戶(hù)界面應(yīng)用程序開(kāi)發(fā)框架,可用于開(kāi)發(fā)移動(dòng)設(shè)備、桌面應(yīng)用程序、嵌入式系統(tǒng)等多種軟件。Qt中有很多方便的工具,其中包括數(shù)據(jù)庫(kù)操作和PDF報(bào)表生成工具。在這篇文章中,我們將專(zhuān)注于如何使用Qt的這兩個(gè)工具結(jié)合起來(lái),實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作并生成PDF報(bào)表。

創(chuàng)新互聯(lián)建站科技有限公司專(zhuān)業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供服務(wù)器托管,高防服務(wù)器,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。

一、數(shù)據(jù)庫(kù)操作

Qt中內(nèi)置了很多的數(shù)據(jù)庫(kù)類(lèi),支持多種數(shù)據(jù)庫(kù),包括MySQL、SQLite、PostgreSQL等。我們以SQLite為例,講述如何實(shí)現(xiàn)與數(shù)據(jù)庫(kù)操作。

1. SQLite數(shù)據(jù)庫(kù)

SQLite是一種輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),主要特點(diǎn)是不需要安裝和配置,同時(shí)具有極高的性能。它最適合于嵌入式設(shè)備和移動(dòng)設(shè)備上的應(yīng)用程序。

在Qt中,我們可以通過(guò)QSqlDatabase來(lái)連接SQLite數(shù)據(jù)庫(kù)。首先需要在項(xiàng)目中添加如下代碼:

“`c++

#include

#include

QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);

db.setDatabaseName(“test.db”);

if(!db.open()) {

qWarning()

}

“`

以上代碼中,我們首先include了QSqlDatabase和QDebug類(lèi)。接著,我們創(chuàng)建了一個(gè)QSqlDatabase對(duì)象db,并指定了它連接的數(shù)據(jù)庫(kù)類(lèi)型為SQLite。然后我們通過(guò)setDatabaseName方法指定了SQLite數(shù)據(jù)庫(kù)的名稱(chēng)為test.db,也可以指定其他的數(shù)據(jù)庫(kù)名稱(chēng)。如果連接成功,open()函數(shù)會(huì)返回true,否則返回false。如果連接失敗,我們通過(guò)qWarning()打印一條錯(cuò)誤信息。

之后,我們還需要執(zhí)行SQL語(yǔ)句,可以通過(guò)QSqlQuery來(lái)實(shí)現(xiàn)。下面是一段簡(jiǎn)單的SQL語(yǔ)句:

“`c++

QSqlQuery query;

query.exec(“CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20), age INT)”);

query.exec(“INSERT INTO user VALUES(1, ‘Tom’, 18)”);

“`

在上述代碼中,我們首先創(chuàng)建一個(gè)QSqlQuery對(duì)象query,之后通過(guò)SQL語(yǔ)句創(chuàng)建了一個(gè)名為user的表,并插入了一條id為1,name為T(mén)om,age為18的數(shù)據(jù)。

到此為止,我們已經(jīng)成功地實(shí)現(xiàn)了與SQLite數(shù)據(jù)庫(kù)的連接和數(shù)據(jù)插入操作。但是,這并不足以說(shuō)明Qt的數(shù)據(jù)庫(kù)操作功能。

2. 數(shù)據(jù)庫(kù)查詢(xún)

在實(shí)際應(yīng)用中,我們通常需要從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。這時(shí),我們可以通過(guò)SELECT語(yǔ)句來(lái)實(shí)現(xiàn)。下面是一個(gè)查詢(xún)id為1的數(shù)據(jù)的例子:

“`c++

query.exec(“SELECT * FROM user WHERE id=1”);

while(query.next()) {

int id = query.value(0).toInt();

QString name = query.value(1).toString();

int age = query.value(2).toInt();

qDebug()

}

“`

我們執(zhí)行了SELECT語(yǔ)句,查詢(xún)id為1的數(shù)據(jù),并通過(guò)while循環(huán)遍歷查詢(xún)結(jié)果。在循環(huán)中,我們通過(guò)query.value(i)方法獲取第i列的數(shù)據(jù),并根據(jù)數(shù)據(jù)類(lèi)型將其轉(zhuǎn)換為對(duì)應(yīng)的類(lèi)型。在這個(gè)例子中,我們獲取了id、name、age三列的數(shù)據(jù),并將其打印出來(lái)。

除了SELECT語(yǔ)句,還可以通過(guò)UPDATE、DELETE等語(yǔ)句來(lái)更新或刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

3. 數(shù)據(jù)庫(kù)導(dǎo)出

除了查詢(xún)和更新操作,我們還可以將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為CSV文件。CSV文件的全稱(chēng)為Comma-Separated Values,即用逗號(hào)將每個(gè)單元格的數(shù)據(jù)分隔開(kāi)來(lái),并在每行的末尾添加一個(gè)換行符。在Qt中,我們可以通過(guò)QTextStream來(lái)將數(shù)據(jù)寫(xiě)入CSV文件中,以下是一段導(dǎo)出user表的代碼:

“`c++

QFile file(“user.csv”);

if(file.open(QFile::WriteOnly|QFile::Truncate)) {

QTextStream out(&file);

QSqlQuery query(“SELECT * FROM user”);

out

while(query.next()) {

out

}

}

“`

在這個(gè)例子中,我們首先創(chuàng)建一個(gè)QFile對(duì)象file,并打開(kāi)其寫(xiě)入權(quán)限(QFile::WriteOnly),同時(shí)清空文件內(nèi)容(QFile::Truncate)。接著,我們創(chuàng)建一個(gè)QTextStream對(duì)象out,并將其與file綁定。然后,我們執(zhí)行SELECT語(yǔ)句,查詢(xún)user表中的所有數(shù)據(jù),并通過(guò)out將字段名稱(chēng)寫(xiě)入CSV文件中。我們遍歷查詢(xún)結(jié)果,并將其寫(xiě)入CSV文件中。

二、PDF報(bào)表生成

Qt中還提供了豐富的PDF報(bào)表生成工具,可以方便地將數(shù)據(jù)輸出為PDF格式。我們主要介紹以下兩種PDF報(bào)表生成工具:QPnter和QPrinter。

1. QPnter

QPnter是Qt中專(zhuān)門(mén)用于圖形繪制的類(lèi),我們可以通過(guò)QPnter將數(shù)據(jù)繪制到PDF中。下面是一個(gè)簡(jiǎn)單的例子:

“`c++

QPrinter printer;

printer.setOutputFileName(“user.pdf”);

printer.setPageSize(QPrinter::A4);

printer.setOutputFormat(QPrinter::PdfFormat);

QPnter pnter;

pnter.begin(&printer);

pnter.drawText(100, 100, “This is a test.”);

pnter.end();

“`

在上述代碼中,我們首先創(chuàng)建了一個(gè)QPrinter對(duì)象printer,并指定了輸出文件名、頁(yè)面大小、輸出格式。之后,我們創(chuàng)建了一個(gè)QPnter對(duì)象pnter,并調(diào)用其begin方法與printer綁定。接著,我們通過(guò)QPnter繪制了一個(gè)文本對(duì)象,最后調(diào)用pnter.end()結(jié)束繪制,將數(shù)據(jù)保存到文件中。

除了drawText方法,QPnter還支持很多其他的繪制方法,例如繪制線條、矩形、圓形、圖像等。

2. QPrinter

QPrinter是QPnter的一個(gè)子類(lèi),它是用于管理打印機(jī)和打印設(shè)置的類(lèi)。我們可以通過(guò)它的屬性來(lái)設(shè)置頁(yè)面大小、方向、邊距等。下面是一個(gè)例子:

“`c++

QPrinter printer;

printer.setOutputFormat(QPrinter::PdfFormat);

printer.setOutputFileName(“user.pdf”);

QTextDocument doc;

doc.setHtml(“

This is a test.

“);

doc.print(&printer);

“`

在這個(gè)例子中,我們創(chuàng)建了一個(gè)QPrinter對(duì)象printer,并指定了輸出格式為PDF格式,輸出文件名為user.pdf。我們還創(chuàng)建了一個(gè)QTextDocument對(duì)象doc,并通過(guò)setHtml方法設(shè)置其內(nèi)容為一個(gè)標(biāo)題。我們調(diào)用doc.print(&printer)方法將QTextDocument對(duì)象打印到PDF文件中。

除了print方法外,QPrinter還支持printDialog和setup等方法,用于打印機(jī)設(shè)置和頁(yè)面設(shè)置。

三、綜合應(yīng)用:數(shù)據(jù)庫(kù)操作和PDF報(bào)表生成

在本節(jié)中,我們將介紹如何將數(shù)據(jù)庫(kù)操作和PDF報(bào)表生成結(jié)合起來(lái),實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并生成PDF報(bào)表的功能。這需要我們使用到Qt中的信號(hào)與槽機(jī)制,以下是一個(gè)完整的例子:

“`c++

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

class MnWindow : public QMnWindow {

Q_OBJECT

public:

explicit MnWindow(QWidget *parent = 0);

private:

void createModel();

void createView();

void createPdf();

QSqlTableModel *model;

QTableView *view;

QWidget *centralWidget;

QVBoxLayout *vLayout;

QHBoxLayout *hLayout;

QPushButton *pdfBtn;

private slots:

void pdfClicked();

};

MnWindow::MnWindow(QWidget *parent) : QMnWindow(parent) {

createModel();

createView();

centralWidget = new QWidget(this);

vLayout = new QVBoxLayout(centralWidget);

hLayout = new QHBoxLayout();

pdfBtn = new QPushButton(tr(“Export as PDF”), centralWidget);

pdfBtn->setFixedSize(100, 30);

hLayout->addStretch();

hLayout->addWidget(pdfBtn);

vLayout->addWidget(view);

vLayout->addLayout(hLayout);

setCentralWidget(centralWidget);

connect(pdfBtn, SIGNAL(clicked()), this, SLOT(pdfClicked()));

}

void MnWindow::createModel() {

QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);

db.setDatabaseName(“test.db”);

if(!db.open()) {

qWarning()

}

model = new QSqlTableModel(this, db);

model->setTable(“user”);

model->select();

}

void MnWindow::createView() {

view = new QTableView(this);

view->setModel(model);

view->setFixedSize(400, 300);

}

void MnWindow::createPdf() {

QString fileName = QFileDialog::getSaveFileName(this,

tr(“Export PDF”), QString(), “*.pdf”);

if(!fileName.isEmpty()) {

QPrinter printer(QPrinter::HighResolution);

printer.setOutputFormat(QPrinter::PdfFormat);

printer.setOutputFileName(fileName);

QTextDocument doc;

doc.setHtml(“

User Information

“);

QSqlQuery query(“SELECT * FROM user”);

while(query.next()) {

doc.setHtml(doc.toHtml() +

” + query.value(0).toString() +

“, ” + query.value(1).toString() +

“, ” + query.value(2).toString() + “

“);

}

doc.print(&printer);

}

}

void MnWindow::pdfClicked() {

createPdf();

}

int mn(int argc, char *argv[]) {

QApplication a(argc, argv);

MnWindow w;

w.show();

return a.exec();

}

#include “mn.moc”

“`

在以上代碼中,我們首先創(chuàng)建了一個(gè)MnWindow類(lèi),該類(lèi)繼承自QMnWindow類(lèi)。在MnWindow類(lèi)中,我們創(chuàng)建了一個(gè)QSqlTableModel對(duì)象model,并將其與SQLite數(shù)據(jù)庫(kù)綁定,之后將其綁定到QTableView對(duì)象view上。我們還創(chuàng)建了一個(gè)QPushButton對(duì)象pdfBtn,并添加到了一個(gè)QHBoxLayout對(duì)象中。最終我們通過(guò)setLayout方法將view和pdfBtn綁定到一個(gè)QWidget對(duì)象centralWidget上,并將其設(shè)置為主窗口的中心部件,這樣我們就完成了主窗口的構(gòu)造。

接著,我們通過(guò)connect方法將pdfBtn的clicked信號(hào)和pdfClicked槽函數(shù)綁定。在pdfClicked槽函數(shù)中,我們創(chuàng)建了一個(gè)QString對(duì)象fileName,并調(diào)用QFileDialog的getSaveFileName方法來(lái)獲取輸出文件名。如果用戶(hù)選擇了一個(gè)有效的文件名,我們就創(chuàng)建了一個(gè)QPrinter對(duì)象printer,并將輸出格式設(shè)置為PDF格式,輸出文件名設(shè)置為fileName。之后,我們創(chuàng)建了一個(gè)QTextDocument對(duì)象doc,并設(shè)置其內(nèi)容為一個(gè)標(biāo)題,“User Information”,之后通過(guò)SELECT語(yǔ)句查詢(xún)user表中的所有數(shù)據(jù),并將其添加到QTextDocument對(duì)象doc中,最后調(diào)用doc.print(&printer)方法將其輸出到PDF文件中,并完成報(bào)表輸出工作。

四、結(jié)論

相關(guān)問(wèn)題拓展閱讀:

  • qt5編寫(xiě)pdf閱讀器,怎么編譯poppler

qt5編寫(xiě)pdf閱讀器,怎么編譯poppler

可以參考這篇博客畢棗鄭,windows下直巖旦接手頌使用博主提供的庫(kù),linux下也有對(duì)應(yīng)的安裝包,

Qt博客

一般分為動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù),方法分別如渣拆下: 一. 靜態(tài)庫(kù)的生成脊汪 1. 測(cè)試目錄: lib 2. 源碼文件名: mywindow.h, mywindow.cpp 3. 編櫻梁仔寫(xiě)項(xiàng)目文件: mywindow.pro 注意兩點(diǎn): TEMPLATE = lib CONFIG += staticlib 4. 生成Makefile: qmake mywindow.pro 5

關(guān)于qt 讀取數(shù)據(jù)庫(kù)生成pdf的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開(kāi)通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)-網(wǎng)站建設(shè),軟件開(kāi)發(fā)老牌服務(wù)商!微信小程序開(kāi)發(fā),APP開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷(xiāo)推廣服務(wù)眾多企業(yè)。電話:028-86922220


網(wǎng)頁(yè)題目:Qt編程技術(shù):數(shù)據(jù)庫(kù)操作生成PDF報(bào)表 (qt 讀取數(shù)據(jù)庫(kù)生成pdf)
文章出自:http://m.5511xx.com/article/cosgjoh.html