Qt自適應大小顯示圖片,添加菜單


由於后面的圖像處理需要UI,OpenCV自帶也不怎么會,MFC實在懶得學的。聽同學說Qt不錯,就用Qt做UI了。

本文主要介紹三個內容:在Qt Creator中使用OpenCV2、Qt中自適應顯示圖片以及在Qt窗口中添加菜單

1.在Qt Creator中使用OpenCV2

一直使用 Visual Studio作為開發環境,OpenCV2在Visual Studio中也已經配置好了,而且Qt也有官方開發的Visual Studio的插件,所以就想着直接在Visual Studio中用OpenCV2+Qt5的。但是Qt在Visual Studio用着實在別扭,特別是UI文件同步到VS中有一定的延遲,也就是你在UI上拖放了一個Button,但是要過一段時間VS的自動提示才會有那個Button對象名的提示,並且改動UI后要首先編譯一次。所以,最后決定在Qt Creator中使用OpenCV2。

網上看了不少Qt Creator中使用OpenCV2都是自己編譯OpenCV的源代碼生成庫文件,然后再Qt Creator中使用。我是直接使用OpenCV為VS預先編譯好的庫文件,配置方法也很簡單,就是打開項目的pro文件,在該文件中添加如下內容:

INCLUDEPATH += E:/opencv/build/include\
    E:/opencv/build/include/opencv2

win32:CONFIG(debug, debug|release): {
LIBS += -LE:/opencv/build/x86/vc12/lib \
-lopencv_calib3d249d \
-lopencv_contrib249d \
-lopencv_core249d \
-lopencv_features2d249d \
-lopencv_flann249d \
-lopencv_gpu249d \
-lopencv_highgui249d \
-lopencv_imgproc249d \
-lopencv_legacy249d \
-lopencv_ml249d \
-lopencv_nonfree249d \
-lopencv_objdetect249d \
-lopencv_photo249d \
-lopencv_stitching249d \
-lopencv_ts249d \
-lopencv_video249d \
-lopencv_videostab249d
} else:win32:CONFIG(release, debug|release): {
LIBS += -LE:/opencv/build/x86/vc12/lib \
-lopencv_core249 \
-lopencv_imgproc249 \
-lopencv_highgui249 \
-lopencv_ml249 \
-lopencv_video249 \
-lopencv_features2d249 \
-lopencv_calib3d249 \
-lopencv_objdetect249 \
-lopencv_contrib249 \
-lopencv_legacy249 \
-lopencv_flann249
}

把上面文件的路徑以及版本號改成自己機器上的即可。

2.Qt窗口自適應大小顯示圖片

實現思路也挺簡單的,使用QLabel顯示圖片,把這個QLabel放在一個ScrollArea上面,這樣圖片過大的時候會自動的添加滾動條,最后窗體使用水平布局,這樣ScrollArea的大小會隨着窗口的大小自動改變。下面上代碼

private:
    Ui::MainWindow *ui;
    QLabel *label ;

首先聲明一個QLabel用於圖片(ScrollArea在設計器上拖放到窗體上,並設置窗口的布局方式為水平布局)。

設置QLabel的pixmap,並設置QLabel的大小和圖片一致,最后將該QLabel添加到ScrollArea上。

QString fileName = QFileDialog::getOpenFileName(this,"Choose Image","x:/image",("Image File(*.*)")) ;
    QImage image ;
    image.load(fileName) ;

    label = new QLabel();
    label->setPixmap(QPixmap::fromImage(image));
    label->resize(QSize(image.width(),image.height()));
    ui->scrollImag->setWidget(label);

效果如下:

image

圖片比較大,自動的添加了滾動條。

image

改變了窗口的大小,圖片全部顯示出來,滾動條消失。

3.添加菜單

Qt中窗體上的菜單欄對象是QMenuBar,菜單欄上可以有多個菜單(QMenu),每個菜單可以下拉多個選項(QAction)。

首先需要想窗體中添加一個QMenuBar(Qt5好像是默認添加的),然后一個個菜單,並添加到QMenuBar上。

fileMenu = ui->menuBar->addMenu(tr("File"));
grayLevelTransMenu = ui->menuBar->addMenu(tr("LineTransform")) ;

menuBar的addMenu的返回值是QMenu的實例,這里添加兩個菜單:File和LineTransform

接下來要創建菜單選項也就是Action,並為這些Action綁定上槽函數,最后將創建好的Action添加到菜單上就完成了。

private:
    void createMenu();
    void createAction();

private:
    Ui::MainWindow *ui;
    QLabel *imageLabel ;

    QMenu *fileMenu ;
    QMenu *grayLevelTransMenu ;

    QAction *openImageAction ;
    QAction *lineTransformAction ;
    QAction *logTransformAction ;
    QAction *powerTransfromAction ;
    QAction *expTransformAction;
    QAction *grayEqualizeAction;

private slots:
    void openImageActionSlot();
    void lineTransformActionSlot();
    void logTransformActionSlot();
    void powerTransfromActionSlot();
    void expTransformActionSlot();
    void grayEqualizeSlot();

聲明需要的菜單(QMenu)和菜單選項(QAction),並且聲明好了每個QAction所使用的槽函數。CreateMenu和CreateAction用來創建菜單和菜單選項的。

openImageAction = new QAction(tr("Open Image"),this) ;
    QObject::connect(openImageAction,SIGNAL(triggered()),this,SLOT(openImageActionSlot()));

創建打開圖片的菜單選項,並綁定好了槽函數,其余的菜單選項於此類似。

fileMenu = ui->menuBar->addMenu(tr("File"));
    fileMenu->addAction(openImageAction);

創建File菜單,並將打開圖片的菜單選項添加到其下。

最終效果:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM