本文主要介绍,如何使用在VS2015平台上集成QT环境实现一个控件(Widget),该控件可以展示图片,并且该支持滚动鼠标中间放大缩小图片,右键移动鼠标进行图片的拖动。本文将从以下几个部分进行描述:
将QT集成到VS2015平台
自定义控件描述
图片放大、缩小、移动的实现
工程效果
总结
一、 将QT集成到VS2015平台
主要过程:安装QT、配置环境、和安装vs2015插件。在开源社区的一篇博客描述得很清楚,在这里不赘述了。点此跳转到该博客
二、 自定以控件描述
在QT当中没有专门用来展示图片的控件,通常用于展示图片的控件是QLabel,但是该控件不支持图片的缩放移动等功能,所以就自定义一个控件,使其支持上述功能。
先上代码:
qclicklabel.hpp:
#pragma once
#include
#include
#include
#include
class QClickLabel : public QLabel {
Q_OBJECT
signals :
void MouseRelease(QMouseEvent *evt);
void KeyPressed(QKeyEvent *evt);
void MouseMoved(QMouseEvent* evt);
void MousePressed(QMouseEvent* evt);
void MouseDoubliClick(QMouseEvent* evt);
void WheelEvent(QWheelEvent* evt);
public:
QClickLabel(QWidget * parent = Q_NULLPTR): QLabel(parent)
{}
~QClickLabel();
protected:
void mouseReleaseEvent(QMouseEvent*); // listen to mouse event
void mousePressEvent(QMouseEvent*); // listen to mouse event
void mouseMoveEvent(QMouseEvent*); // listen to mouse event
void keyPressEvent(QKeyEvent *); // listen to key press event
void mouseDoubleClickEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
};
QClickLabel继承于QLabel,该控件能够支持鼠标的点击、移动、释放、双击、和中键滚动事件(代码protected部分定义);同时该控件能够发射出相应的信号(代码signals处定义)
qclicklabel.cpp:
#include "qclicklabel.hpp"
// destructor
QClickLabel::~QClickLabel() {
}
void QClickLabel::mouseReleaseEvent(QMouseEvent *evt)
{
qDebug() << "in function ClickedLabel mouse release" << endl;
emit MouseRelease(evt);
}
void QClickLabel::keyPressEvent(QKeyEvent *evt) {
// listen to key press event
qDebug() << "in function Cli