此程序为是在Windows下实现采集640*480的图像,并实现相应的鼠标事件
首先,在Qt Creator 中创建MainWindow,在创建的时候创建图形界面,在MainWindow.ui中使用垂直或是水平布局,改布局的名称为:ImageView
然后在MainWindow.h为
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
#include <QMainWindow>
#include <QCamera>
#include <QCameraViewfinder>
namespace Ui {
class MainWindow;
}
class QCamera;
class QCameraViewfinder;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QLabel *statusLabel;
QLabel *MousePosLabel;
QCamera *camera;
QCameraViewfinder *viewfinder;
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
};
#endif // MAINWINDOW_H
相应的mainwindow.cpp为:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QToolTip>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
camera=new QCamera(this);
viewfinder=new QCameraViewfinder(this);
ui->ImageView->addWidget(viewfinder);
camera->setViewfinder(viewfinder);
camera->start();
setWindowTitle(tr("鼠标事件"));
MousePosLabel = new QLabel;
MousePosLabel -> setText(tr(" "));
MousePosLabel -> setFixedWidth(100);
this -> setMouseTracking(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
QString pStr("%1,%2");
pStr = pStr.arg(event->pos().x()).arg(event->pos().y());
QToolTip::showText(mapToGlobal(event->pos()) ,pStr);
QPoint pos;
qDebug()<<"x="<<event->x()<<" "<<"y="<<event->y();//局部
pos = QCursor::pos();
qDebug()<<"x:"<<pos.x()<<" "<<"y:"<<pos.y();//全局
QPoint cur;
if((event->pos().x()>640)||(event->pos().y()>480)||(event->pos().x()<0)||(event->pos().y()<0))
{
qDebug()<<"######";
QCursor p;
p.setPos(240,136);//回到中间位置
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
QString pStr("%1,%2");
pStr = pStr.arg(event->pos().x()).arg(event->pos().y());
QToolTip::showText(mapToGlobal(event->pos()) ,pStr);
QPoint pos;
qDebug()<<"x="<<event->x()<<" "<<"y="<<event->y();//局部
pos = QCursor::pos();
qDebug()<<"x:"<<pos.x()<<" "<<"y:"<<pos.y();//全局
QPoint cur;
if((event->pos().x()>640)||(event->pos().y()>480)||(event->pos().x()<0)||(event->pos().y()<0))
{
qDebug()<<"######";
QCursor p;
p.setPos(240,136);//回到中间位置
}
// MousePosLabel -> setText("("+QString::number(event -> x())+","+QString::number(event -> y())+")");
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
QString pStr("%1,%2");
pStr = pStr.arg(event->pos().x()).arg(event->pos().y());
QToolTip::showText(mapToGlobal(event->pos()) ,pStr);
QPoint pos;
qDebug()<<"x="<<event->x()<<" "<<"y="<<event->y();//局部
pos = QCursor::pos();
qDebug()<<"x:"<<pos.x()<<" "<<"y:"<<pos.y();//全局
QPoint cur;
if((event->pos().x()>640)||(event->pos().y()>480)||(event->pos().x()<0)||(event->pos().y()<0))
{
qDebug()<<"######";
QCursor p;
p.setPos(240,136);//回到中间位置
}
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
QString pStr("%1,%2");
pStr = pStr.arg(event->pos().x()).arg(event->pos().y());
QToolTip::showText(mapToGlobal(event->pos()) ,pStr);
QPoint pos;
qDebug()<<"x="<<event->x()<<" "<<"y="<<event->y();//局部
pos = QCursor::pos();
qDebug()<<"x:"<<pos.x()<<" "<<"y:"<<pos.y();//全局
QPoint cur;
if((event->pos().x()>640)||(event->pos().y()>480)||(event->pos().x()<0)||(event->pos().y()<0))
{
qDebug()<<"######";
QCursor p;
p.setPos(240,136);//回到中间位置
}
}
main函数为:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.resize(640,480);
w.show();
return a.exec();
}实现效果为: