Windows下Qt使用Usb摄像头采集视频实现鼠标事件

此程序为是在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();
}
 实现效果为: 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值