天天看點

Qt圖檔另存為功能

QT在學習的過程中總是遇到各種問題,沒有人解答,隻有自己在研究并且在網上搜尋一些資料,從初學到現在入門,一直都是這樣走過來的,雖然走得很艱難,但是每一個階段都會有所收獲,最近在做一個圖檔浏覽子產品的功能,需要實作一個圖檔修改以後把圖檔另存為的功能,剛開始覺得挺麻煩,查找資料的時候也覺得很繁瑣,很多資料都不是很詳細,花費了我兩天的時間我才将這個功能給實作了,到最後發現這個功能實作實際很簡單,知識自己不了解QFileDialog控件和它的用法,導緻白白浪費了這麼多時間,不過也在這個過程中對QFileDialog控件有了具體的了解。廢話不多說了,下面是一個具體的代碼,希望對一些學習Qt的朋友有所幫助。

    QFileDialog *fileDialog = new QFileDialog(this);//建立一個QFileDialog對象,構造函數中的參數可以有所添加。

    fileDialog->setWindowTitle(tr("Save As"));//設定檔案儲存對話框的标題

    fileDialog->setAcceptMode(QFileDialog::AcceptSave);//設定檔案對話框為儲存模式

    fileDialog->setFileMode(QFileDialog::AnyFile);//設定檔案對話框彈出的時候顯示任何檔案,不論是檔案夾還是檔案

    fileDialog->setViewMode(QFileDialog::Detail);//檔案以詳細的形式顯示,顯示檔案名,大小,建立日期等資訊;

                                                                      //還有另一種形式QFileDialog::List,這個隻是把檔案的檔案名以清單的形式顯示出來

    fileDialog->setGeometry(10,30,300,200);//設定檔案對話框的顯示位置

    fileDialog->setDirectory(".");//設定檔案對話框打開時初始打開的位置

    fileDialog->setFilter(tr("Image Files(*.jpg *.png)"));//設定檔案類型過濾器

    if(fileDialog->exec() == QDialog::Accepted) {//注意使用的是QFileDialog::Accepted或者QDialog::Accepted,不是QFileDialog::Accept

        QString path = fileDialog->selectedFiles()[0];//得到使用者選擇的檔案名

        filePath=listWidget_File->item(listWidget_File->currentRow())->text();//這個是得到在ListWidget中點選檢視的圖檔,得到這個圖檔的名字

        filePath=QString("/media/sd/PICTURES")+filePath;//将路徑和檔案名連接配接起來

        QImage iim(filePath);//建立一個圖檔對象,存儲源圖檔

        QPainter painter(&iim);//設定繪畫裝置

        QFile file(path);//建立一個檔案對象,存儲使用者選擇的檔案

        if (!file.open(QIODevice::ReadWrite)){以隻讀的方式打開使用者選擇的檔案,如果失敗則傳回

            return;

        }

//以流方式寫入檔案

        QByteArray ba;

        QBuffer buffer(&ba);

        buffer.open(QIODevice::WriteOnly);

        iim.save(&buffer, "JPG");//把圖檔以流方式寫入檔案緩存流中

        file.write(ba);//将流中的圖檔寫入檔案對象當中

如果不當指出,可以指出,共同進步。

繼續閱讀