1. 程式人生 > >Qt實現讀取影象並且視窗加滑動條,點選影象在滑鼠點選處繪製小影象

Qt實現讀取影象並且視窗加滑動條,點選影象在滑鼠點選處繪製小影象

最近有點忙,在拿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_OBJECT

public:
	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關於影象處理方面的東西還是有點少,這個工程貼出來,希望對大家有所幫助吧~


相關推薦

Qt實現讀取影象並且視窗滑動影象滑鼠繪製影象

最近有點忙,在拿Qt編一個軟體,其中有一小部分對影象進行處理的工作,自己通過查資料,寫了一個小例子,這個小例子可以實現讀取影象,給影象視窗新增滑動條,並且在影象上點選滑鼠,可以在滑鼠點選處加入一個小的影象。 廢話不多說。直接上原始碼: main.cpp: #include

QT 實現 讀取 增加 刪除 實時操作xml

include "operatexml.h" include OperateXml::OperateXml(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); readXML(); load(); connect(ui.pushBut

QML實現的無邊框視窗的拉伸拖拽基本解決閃爍嚴重問題

使用qt製作的無邊框視窗,只需在其flag中加入FramelessWindowHint。然而,無邊框視窗意味著,無法使用原有的邊框拉伸,拖拽功能。在qwidget中,有很多實現的方法,比如重寫    + mouseMoveEvent(QMouseEvent *event)  

Qt實現遍歷資料夾和檔案目錄並過濾和獲取檔案資訊、字尾名、字首名(三)

下面是自己的實際工作中寫的程式碼,請大家斧正#ifndefINQUIRYDIALOG_H#defineINQUIRYDIALOG_H#include<QDialog>#include<QFileDialog>#include<QDir>#i

Java OpenCV開發——使用JavaCV在視窗顯示影象並監聽滑鼠事件

  在Eclipse下使用OpenCV開發過程中,需要在彈出視窗中顯示影象,並能監聽滑鼠點選事件。但網上一般都是用JLabel顯示圖片,再新增到JFrame上;但JLabel不對輸入事件作出反應,無法實現需求。      為此我查遍資料,發現在JavaCV中

Qt實現炫酷啟動圖-動態進度

spl tle ner 也有 喜歡 top evel 註意 有一種 目錄 一、簡述 二、動效進度條 1、光效進度條 2、延遲到達進度條 3、接口說明

Android自定義Seekbar滑動Pop提示跟隨滑動按鈕一起滑動

由於專案需要做出此效果,自定義寫了一個。 效果圖 思路: 原始的seekbar只有滑動條並沒有下方的提示文字,所以我們必須要繼承Seekbar重寫這個控制元件。 程式碼: 在values資料夾下新建attrs.xml,用於設定跟隨滑動按鈕的文字大小,顏色,背景。

opencv+QT實現影象操作(影象的與、或、異或、取反、兩影象相減、RGB轉YUV、YUV轉RG等等)

需求簡介: 由於最近在做影象處理的專案,有時候需要快速的知道影象的最大畫素值和最小畫素值是多少,或者影象的最大最小畫素的座標在哪裡。需要快速的得到RGB影象中的R、G、B當中的某個通道。需要把RGB影象轉成YUV資料儲存。需要把YUV資料轉成RGB圖片儲存。當每次需要用到這

CefSharp.v49.0.1瀏覽器控制元件完全WPF版實現禁止彈出新視窗在同一視窗開啟連結並且支援帶type="POST" target="_blank"的連結

    需求場景:在查詢頁面,填寫查詢條件,查詢條件包括上傳的圖片,根據圖片的特徵查詢,這就需要在提交的時候,使用POST提交,因為GET提交無法提交圖片資料,提交查詢條件之後,在新的視窗展示查詢結果。(當然查詢結果頁面可能不支援F5重新整理頁面) 表單HTML程式碼示意(注意metho

Android中應用TabLayout實現頂部Tab選單滑動效果

TabLayout控制元件是2015年google大會上,google釋出了新的Android Support Design庫,裡面包含了幾個新的控制元件,其中就有一個TabLayout,它就可以完成TabPageIndicator的效果,而且還是官方的,最好的是它可以相容

影象處理之qt實現

#include \"mainwindow.h\" #include \"ui_mainwindow.h\" #include <QFileDialog> #include <QMovie> #include <QRgb> #include <math.

Qt實現視窗的無邊框化且可拉伸大小

簡述 大家在做Qt的時候,經常都會遇到自定義QWidget吧,但一旦實現後,有變的不可以拉伸了,今天我們就來做一個可拉伸的自定義QWidget並且可以移動 實現 #ifndef AUTOSIZEWIDGET_H #define AUTOSIZEWIDG

QT操控excel1:如何實現讀取excel檔案的任意一行一列的值

首先要告訴大家的是這個事非常簡單,不需大家自己去安裝各種包啥的了。 只需要安裝了QT就行,然後在pro檔案裡面加上一行 CONFIG+=qaxcontainer 接著我們在MainWindow.c

Qt實現二值細胞影象區域上色

問題描述 在細胞影象處理和識別中,區域特徵是非常重要的,也是分析細胞特徵的前提和基礎。這些區域特徵可以是外接矩形、畫素點個數等。因此,我們需要得到跟蹤得到不同區域,才能對其進行特徵分析。針對該問題,我們需要設計一個類和相關方法,用於跟蹤得到每個區域,並填上不同

Java 實現按行讀取檔案並且將行中的重複資料刪除

package com.gaden.delerepeat; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStr

轉:QT實現陰影視窗(三)

上一篇講到了實現用拖動視窗,這篇分享一下實現最大化,最小化視窗。      一般的視窗都有最大化最小化功能,在WINDOWS系統下,在視窗右上角有相應的按鈕,而在MAC系統,相應的按鈕是在左上角的。現在我們的視窗是沒有最小化最小化和關閉按鈕的,要關閉視窗只能用Alt + F

Qt佈局管理: 分割視窗QSplitter類講解(純程式碼實現分割視窗

一個QSplitter是一個可以包含其他控制元件的控制元件,這些控制元件被一個分隔條隔開,託拽這個分隔條,可以改變splitter的子控制元件的大小。 QSplitter控制元件經常做為佈局管理器使用

Qt 實現 QQ 9.0 新版登入視窗

簡述 QQ的介面又進行了一波更新,登入介面的樣式換了一種全新的效果。一直很喜歡QQ的介面,所以進行了一波模仿。 點選登入,登入成功之後,右側會出現一條伸出的豎線,然後視窗會自動向右移動直到視窗完全隱藏,然後豎線再進行收縮,總共三個連續動畫效果,下面是效果圖。有興

Qt佈局管理: 停靠視窗QDockWidget類(純程式碼實現

(注:以下解釋是我自己的翻譯,由於英文水平有限,望海涵) 詳細描述: QDockWidget類提供了一個窗體部件,其可以停靠在QMainWindow,或其本身作為一個在桌面上的頂級視窗(也就是父窗體

qt基於qstackedwidget的同一視窗介面變換實現

想要實現點選文字,直線,時間三個按鈕,對話方塊介面部分同一位置發生變化,變為相應的引數選擇。剛開始使用的hide(),show(),後來發現由於棧的原因,三個部分由於位置重疊,有前後之分,所以只能調節一個,其他部分不能調節,雖然可以看到。嘗試用lower(),raise()也