Qt实现读取图像并且窗口加滑动条,点击图像在鼠标点击处绘制小图像

来源:互联网 发布:徐州软件行业发展前景 编辑:程序博客网 时间:2024/06/05 00:33

最近有点忙,在拿Qt编一个软件,其中有一小部分对图像进行处理的工作,自己通过查资料,写了一个小例子,这个小例子可以实现读取图像,给图像窗口添加滑动条,并且在图像上点击鼠标,可以在鼠标点击处加入一个小的图像。

废话不多说。直接上源码:

main.cpp:

#include "labeltest.h"#include <QtWidgets/QApplication>#include <QScrollArea>int main(int argc, char *argv[]){QApplication a(argc, argv);LabelTest w;return a.exec();}

ImageLabel.cpp:

#include "ImageLabel.h"ImageLabel::ImageLabel( QWidget *parent /*= 0*/, Qt::WindowFlags f /*= 0*/ ):QLabel(parent){setMouseTracking(true);BackgroundPixmap.load("20130716203114.jpg");this->setPixmap(BackgroundPixmap);this->setMinimumSize(600,400);scrollArea = new QScrollArea();scrollArea->setWindowTitle("QScrollArea");scrollArea->setWidgetResizable(true);scrollArea->setMaximumSize(600,600);//scrollArea->setMinimumSize(600,600);scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);scrollArea->setWidget(this);scrollArea->show();SmallPixmap = QPixmap(50,50);SmallPixmap.fill(QColor(255,255,255));x = -1;y = -1;}ImageLabel::~ImageLabel(){}void ImageLabel::mousePressEvent( QMouseEvent *evt ){x = evt->x();y = evt->y();update();}void ImageLabel::mouseMoveEvent( QMouseEvent *ev ){}void ImageLabel::paintEvent(QPaintEvent *ev){QPainter painter(this);painter.drawPixmap(0, 0, BackgroundPixmap);painter.drawPixmap(x, y, SmallPixmap);}


ImageLabel.h:

#ifndef _IMAHE_LABEL_H_
#define _IMAHE_LABEL_H_#include <QtWidgets/QWidget>#include <QtWidgets/QLabel>#include <QtWidgets/QScrollArea>#include <QPainter>#include <QMouseEvent>class ImageLabel : public QLabel{public:explicit ImageLabel(QWidget *parent = 0, Qt::WindowFlags f = 0);virtual ~ImageLabel();protected:virtual void mousePressEvent(QMouseEvent *evt);virtual void mouseMoveEvent(QMouseEvent *ev);virtual void paintEvent(QPaintEvent *ev);private:QScrollArea *scrollArea;QPixmap BackgroundPixmap;QPixmap SmallPixmap;int x, y;};#endif//_IMAHE_LABEL_H_


Labeltest.h:

#ifndef LABELTEST_H#define LABELTEST_H#include <QtWidgets/QMainWindow>#include "ui_labeltest.h"class LabelTest : public QMainWindow{Q_OBJECTpublic:LabelTest(QWidget *parent = 0);~LabelTest();private:Ui::LabelTestClass ui;};#endif // LABELTEST_H

Labeltest.cpp:
#include "labeltest.h"#include "ImageLabel.h"LabelTest::LabelTest(QWidget *parent): QMainWindow(parent){ui.setupUi(this);ImageLabel *imageLabel = new ImageLabel(this);}LabelTest::~LabelTest(){}


最后的效果就是:

感觉Qt关于图像处理方面的东西还是有点少,这个工程贴出来,希望对大家有所帮助吧~


原创粉丝点击