QT FOR 安卓鼠标控制电脑

    大致思路为安卓客户端获取当前点击的坐标,算出x y之后除以当前屏幕最大分辨率得出百分比,把百分比发到电脑端(UDP or TCP,此处用的UDP),乘以电脑的最大分辨率,在转换为坐标,使用windows api mouse_event 触发移动,和点击消息。

    本示例只提供了鼠标坐标移动和单击出发,如果要加按住拖动效果的话加上mouseMoveevent即可,这里就不再阐述了。

    

发送端:(手机端)

    Pro文件里 += network

    头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork/QtNetwork>
#include <QDesktopWidget>
#include <QMouseEvent>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    ///
    QUdpSocket *sender;
private:
    Ui::MainWindow *ui;
protected:
    void mousePressEvent(QMouseEvent *e);       //--鼠标按下事件

};

#endif // MAINWINDOW_H



    cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    sender = new QUdpSocket(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::mousePressEvent(QMouseEvent *e)
{
    QRect screenrect;
    QDesktopWidget* desktopWidget = QApplication::desktop();//获取分辨率
    screenrect = desktopWidget->screenGeometry();
    //UDP广播
   
    if (e->button()==Qt::LeftButton)
    {
        QPoint point;
        point=QCursor::pos();//获取当前点击的坐标
        ui->label_2->setText(QString::number(point.x(),10));
        ui->label_3->setText(QString::number(point.y(),10));
        float Xpercent=(float)point.x()/screenrect.width();//算出百分百比
        float Ypercent=(float)point.y()/screenrect.bottom();
        QString savepoint;
        savepoint=QString("%1").arg(Xpercent);
        savepoint+="-";
        savepoint+=QString("%1").arg(Ypercent);
         QByteArray datagram;
        datagram=savepoint.toLatin1();//转为QByteArray
    }
    sender->writeDatagram(datagram.data(),datagram.size(),QHostAddress::Broadcast,8000);//广播,端口8000

    //QHostAddress serverAddress = QHostAddress("192.168.1.172");//特定IP
    //sender->writeDatagram(datagram.data(), datagram.size(),serverAddress, 8000);

    /* writeDatagram函数原型,发送成功返回字节数,否则-1
        qint64 writeDatagram(const char *data,qint64 size,const QHostAddress &address,quint16 port)
        qint64 writeDatagram(const QByteArray &datagram,const QHostAddress &host,quint16 port)
    */

}






接收端:

    头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include <QStatusBar>
#include <QTextCodec>
#include <QtNetwork/QtNetwork>
#include <QMouseEvent>
#include<QCursor>
#include<windows.h>
#include<QDesktopWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
public:
    QUdpSocket *receiver;
    QString ipadd;
    void GetLocalIpv4();
private slots:
    void readPendingDatagrams();

};

#endif // MAINWINDOW_H


    cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);       
    MainWindow::GetLocalIpv4();//ipadd为ipv4地址
    receiver = new QUdpSocket(this);
    receiver->bind(QHostAddress(ipadd), 8000);
    connect(receiver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));

}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::readPendingDatagrams()
 {

        QByteArray datagram;
        datagram.resize(receiver->pendingDatagramSize());
        receiver->readDatagram(datagram.data(), datagram.size());
        ui->textBrowser->append(datagram);
        QString Percent=datagram;
        QString percentX,percentY;
        int check=0;

        for(int a=0;a<Percent.length();a++)
       {
            if(Percent.at(a)=="-")
               {
                check=1;
                continue;
                }

            if(check==0)
            {
                percentX+=Percent.at(a);
            }
            else
            {
                percentY+=Percent.at(a);
            }

       }

        QRect screenrect;
        QDesktopWidget* desktopWidget = QApplication::desktop();//获取分辨率
        screenrect = desktopWidget->screenGeometry();
        int x,y;
        x=percentX.toFloat()*screenrect.width();
        y=percentY.toFloat()*screenrect.height();
        mouse_event ( MOUSEEVENTF_ABSOLUTE  | MOUSEEVENTF_MOVE ,x*65532/screenrect.width(), y*65532/screenrect.height(), 0, 0) ; //绝对坐标移动
        mouse_event ( MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );//单击

        //数据接收在datagram里
        /* readDatagram 函数原型
            qint64 readDatagram(char *data,qint64 maxSize,QHostAddress *address=0,quint16 *port=0)
        */

 }

void MainWindow::GetLocalIpv4()
{
    QList<QHostAddress> list = QNetworkInterface::allAddresses();
    foreach (QHostAddress address, list)
    {
        if(address.protocol() == QAbstractSocket::IPv4Protocol)
        {
            //IPv4地址
            if (address.toString().contains("127.0."))
            {
                continue;
            }
            ipadd = address.toString();
        }
    }
    if ( ipadd == "127.0.0.1")
    {
      //QMessageBox::information(this,"message","获取地址失败");
        return;
    }
    else
    {
     // QMessageBox::information(this,"message","获取地址成功");
    }

}











//mouse_event ( MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );//单击
//mouse_event ( MOUSEEVENTF_ABSOLUTE  | MOUSEEVENTF_MOVE , a*65532/1440, b*65532/900, 0, 0) ; //绝对坐标移动

//void MainWindow::on_pushButton_clicked()
//{
//            QPoint point;
//            point=QCursor::pos();
//            QString x,y;
//            x=QString::number(point.x(),10);
//            y=QString::number(point.y(),10);
//            ui->textBrowser->append(x);
//            ui->textBrowser->append("---");
//            ui->textBrowser->append(y);
//}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt for Android 6中调用安卓照相机可以通过使用Qt的Multimedia模块中的Camera类来实现。首先,需要在.pro文件中添加相机模块的引用,例如: QT += multimedia 然后,在需要调用照相机的地方,可以使用以下代码来实现: #include <QCamera> #include <QCameraViewfinder> #include <QCameraImageCapture> // 创建相机对象 QCamera camera; // 创建相机取景器对象,并设置为相机的视图 QCameraViewfinder viewfinder; camera.setViewfinder(&viewfinder); // 创建图像捕捉对象,并设置为相机的图像捕捉 QCameraImageCapture imageCapture; camera.setImageCapture(&imageCapture); // 设置相机的图像保存路径 imageCapture.setCaptureDestination(QCameraImageCapture::CaptureToFile); imageCapture.setCaptureDestination(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)); // 连接图像捕获的信号和槽 QObject::connect(&imageCapture, SIGNAL(imageCaptured(int, const QImage&)), this, SLOT(onImageCaptured(int, const QImage&))); // 启动相机 camera.start(); 上述代码中,首先创建相机对象camera,并创建相机取景器对象viewfinder,并将其设置为相机视图。然后,创建图像捕捉对象imageCapture,并设置为相机的图像捕捉。使用setCaptureDestination方法可以设置图像保存的路径,这里设置为手机的图片存储路径。最后,使用QObject::connect连接图像捕获的信号和槽,并调用camera.start()启动相机。 通过以上步骤,就可以在Qt for Android 6中调用安卓照相机,实现拍照功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值