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、付费专栏及课程。

余额充值