由于后面的图像处理需要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);

效果如下:

图片比较大,自动的添加了滚动条。

改变了窗口的大小,图片全部显示出来,滚动条消失。

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菜单,并将打开图片的菜单选项添加到其下。

最终效果:

Qt自适应大小显示图片,添加菜单的更多相关文章

  1. Qt 让Label显示图片并把图片居中

    Qt 让Label显示图片并把图片居中   QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...

  2. QT使用scrollarea显示图片,完美解决方案

    需求: 在界面上点击“显示图片”按钮,会调用scrollarea窗口显示图片,窗口大小能根据图片大小自动调整,但是最大为1024*768,图片过大就要有滚动条来显示 IDE环境: QT Creator ...

  3. QT 用listveiw显示图片

    很多的时候需要浏览图片,一般会使用listview 显示图片,接下来我用listview显示图片 代码如下: QStandardItem * s1; QStandardItem * s2; QStan ...

  4. QT中循环显示图片和简单的显示图片

    请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...

  5. QT+OpenGL读取显示图片,OpenGL在QT里的刷新问题(好几篇)

    GLuint readImage(char *filename){    GLuint tex_id;    GLint alignment; QImage tex, buf;    buf.load ...

  6. Qt:添加点击事件的Label并显示图片

    1.给label添加点击事件 Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载鼠标事件(比如mousePressedEvent),然后在鼠标事件中发送一个信 ...

  7. wxpython图形化界面编程(一):添加菜单,设置图片大小,添加文本框等,并简要布局

    #-*-encoding:utf-8-*-import wx def loadframe(): app = wx.App() mywindow = myframe() mywindow.Show() ...

  8. Qt笔记——添加菜单图片/添加资源文件

    添加新文件,模板选择Qt分类中的Qt资源文件(Qt Resource File) 先添加前缀,点击"添加"按钮,然后选择"添加前缀",我们这里因为要添加图片,所 ...

  9. Qt 显示图片的三种方法

    一. 直接用QLabel显示原图 //单独显示的QLabel 其大小为内容即图片的大小,若将QLabel放入QMainWindow中则QLabel的大小为其初始大小. /* QLabel *label ...

随机推荐

  1. MYSQL删除重复数据

     delete from co_jobinformation cwhere c.name in (select cc.name from co_jobinformation cc group by   ...

  2. c = (a / b, a%b) 运算输出顺序

    #include<iostream> int main() { using namespace std; int a, b, c; a = ; b = ; c = ; printf(&qu ...

  3. 关于Node.js的总结

    Node是个啥? 1.Node 是一个服务器端 JavaScript 解释器,可是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了,总结:水深不深我还不知道,不过确实不浅. ...

  4. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  5. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  6. ANDROID下面的游戏更新目录

    更新模块的整体方案终于搞定了,包括launcher的自更新,以及framework,app等代码的更新,均测试通过. 很激动地拿到ANDROID上去测试,一下就傻眼了. 在创建upd目录的时候,就遇上 ...

  7. VB6.0中,DTPicker日期、时间控件不允许为空时,采用文本框与日期、时间控件相互替换赋值(解决方案)

    VB6.0中,日期.时间控件不允许为空时,采用文本框与日期.时间控件相互替换赋值,或许是一个不错的选择. 实现效果如下图: 文本框txtStopTime1 时间框DTStopTime1(DTPicke ...

  8. 海淘手表Invicta8926OB到手~晒图

    3月3号通过国内代购网站Hai360海外购下单: 3月5号美亚发货: 3月6号到达转运仓: 3月12号到达天津清关: 清关等了7天: 3月19号转国内快递,我将原武汉地址,改上海,耽误了3天: 3月2 ...

  9. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  10. 2013 duilib入门简明教程 -- 前言(1)

        关于duilib的介绍就不多讲了,一来不熟,二来小伙伴们想必已经对比了多个界面库,也无需赘述.下面进入正题:     不看广告看疗效! 已有众多知名公司采用duilib做为界面库,如华为网盘. ...