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);
效果如下:
图片比较大,自动的添加了滚动条。
改变了窗口的大小,图片全部显示出来,滚动条消失。
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自适应大小显示图片,添加菜单的更多相关文章
- Qt 让Label显示图片并把图片居中
Qt 让Label显示图片并把图片居中 QPixmap image("./13.jpg"); QPixmap fitpixmap=image.scaled(ui->lab ...
- QT使用scrollarea显示图片,完美解决方案
需求: 在界面上点击“显示图片”按钮,会调用scrollarea窗口显示图片,窗口大小能根据图片大小自动调整,但是最大为1024*768,图片过大就要有滚动条来显示 IDE环境: QT Creator ...
- QT 用listveiw显示图片
很多的时候需要浏览图片,一般会使用listview 显示图片,接下来我用listview显示图片 代码如下: QStandardItem * s1; QStandardItem * s2; QStan ...
- QT中循环显示图片和简单的显示图片
请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...
- QT+OpenGL读取显示图片,OpenGL在QT里的刷新问题(好几篇)
GLuint readImage(char *filename){ GLuint tex_id; GLint alignment; QImage tex, buf; buf.load ...
- Qt:添加点击事件的Label并显示图片
1.给label添加点击事件 Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载鼠标事件(比如mousePressedEvent),然后在鼠标事件中发送一个信 ...
- wxpython图形化界面编程(一):添加菜单,设置图片大小,添加文本框等,并简要布局
#-*-encoding:utf-8-*-import wx def loadframe(): app = wx.App() mywindow = myframe() mywindow.Show() ...
- Qt笔记——添加菜单图片/添加资源文件
添加新文件,模板选择Qt分类中的Qt资源文件(Qt Resource File) 先添加前缀,点击"添加"按钮,然后选择"添加前缀",我们这里因为要添加图片,所 ...
- Qt 显示图片的三种方法
一. 直接用QLabel显示原图 //单独显示的QLabel 其大小为内容即图片的大小,若将QLabel放入QMainWindow中则QLabel的大小为其初始大小. /* QLabel *label ...
随机推荐
- Swift 3 and OpenGL on Linux and macOS with GLFW
https://solarianprogrammer.com/2016/11/19/swift-opengl-linux-macos-glfw/ Swift 3 and OpenGL on Linux ...
- css确定元素水平居中和垂直居中
---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当 ...
- 多种坐标系之间的转换 Proj.NET和DotSpatial
Proj.NET ( http://projnet.codeplex.com/)是一个.NET下开源的空间参照和投影引擎,遵循OGC相关标准.负责人(Coordinators )是D_Guidi 和S ...
- Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解
返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...
- 为什么google bazel构建工具流行不起来
作者Jack47 转载请保留作者和原文出处 之前博主写了系列文章Google软件构建工具Bazel原理及使用方法介绍.最近使用了一段时间后,觉得这个东西不是一种通用的构建工具,很难对接到情况复杂的大的 ...
- Functional Programming without Lambda - Part 2 Lifting, Functor, Monad
Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accep ...
- js array queue (队列)
前言 今天项目中做一个图片效果展示,需要实时从后台获取图片数据,前段做展示.想想用到队列,比较好实现这个功能,只需要展示队列里的数据就可以了.于是写了个js 对列. js code /** * [Qu ...
- Leetcode-2 Add Two Numbers
#2. Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits ...
- 在UWP中页面滑动导航栏置顶
最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...
- 用电脑给手机安装App
每一个账号密码只允许同时授权5台电脑,当授权满后还想授权其他的就必须删除以前的授权.