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

来源:互联网 发布:随遇软件 编辑:程序博客网 时间:2024/05/22 10:36

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




原创粉丝点击