在C ++中,当手指在触摸屏上移动时如何更改标签文本

in c++,how to change label text when the finger move on touch screen?

本文关键字:移动 何更改 文本 标签 触摸屏 手指      更新时间:2023-10-16

我的小部件上有一个标签,它的文本是数字1。我想在用户向上或向下移动手指时更改数字(向上=数字 1 ++ 和向下=数字 1--(。这是我的代码,但标签的文本没有改变,但在控制台中我看到值已更改!!还有最好的方法是什么?(获取触摸事件并知道用户手指在触摸屏上的位置(

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qApp->installEventFilter(this);
//    grabGesture(Qt::SwipeGesture);
    QGraphicsView graphicsView;
        graphicsView.setDragMode(QGraphicsView::ScrollHandDrag);
}
MainWindow::~MainWindow()
{
    delete ui;
}
bool MainWindow::event(QEvent *event){
    qDebug()<<"event type"<<event->type();
    if(event->type() ==129 /*|| event->type() ==2 || event->type() ==5 */)
    {
        QMouseEvent *ms=static_cast<QMouseEvent*>(event);
        QPoint p=ms->pos();
//        qDebug()<<"point y"<<p.y()<<" and label . y "<<ui->label->y();
//        qDebug()<<"point x"<<p.x()<<" and label . x "<<ui->label->x();
        if(p.y()>ui->label->y())
        {
             goUpperLabel();qDebug()<<"up?";
        }
        else{
            goButtomLabel();
            qDebug()<<"down?";
        }
    }
}


void MainWindow::goButtomLabel(){
    int a=ui->label->text().toInt();
    qDebug()<<"----down-----"<<a;
    a-=1; qDebug()<<"----down-----"<<a;
    ui->label->setText(QString::number(a));
}
void MainWindow::goUpperLabel(){
    int a=ui->label->text().toInt();
    qDebug()<<"-------up--------"<<a;
    a+=1;qDebug()<<"-------up--------"<<a;
//    ui->label->setText(QString::number(a));
      ui->label->setText("QString::number(a)");
}

这是我在控制台中的输出打印:

[root@FriendlyARM /FGIT]# ./ges1 -qws
Using multi-touch device: /dev/input/event1 (13)
event type 109
event type 68
event type 68
event type 68
event type 68
event type 33
event type 203
event type 75
event type 69
event type 69
event type 69
event type 69
event type 69
event type 70
event type 70
event type 70
event type 70
event type 70
event type 13
event type 14
event type 153
event type 153
event type 153
event type 17
event type 26
event type 67
event type 74
event type 76
event type 77
event type 24
event type 99
event type 8
event type 12
event type 76

////////// in here I touch the touch in top up of label>>>>>
event type 10
event type 127
event type 129
----up----- 1
----up----- 2
up?
event type 2
event type 77
event type 3

可能出了什么问题:

 if(event->type() ==129) 

其中 129 相当于 QEvent::HoverMove

应该尝试使用

if(event->type() ==QEvent::MouseMove)

此外,您应该在事件函数中返回一些内容。

true 表示事件被处理为 false,否则为假。

在您的情况下,return true If 条件中,您正在处理事件。

return QMainWindow::event(event);否则。