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

标签 c++ qt

我的小部件上有一个标签,它的文本是数字 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 条件中,您正在处理您的事件。

返回 QMainWindow::event(event); 否则。

关于c++ - 在C++中,当手指在触摸屏上移动时如何更改标签文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067763/

相关文章:

c++ - 隐藏成员模板的模板参数

c++ - "Temporary object"警告 - 是我还是编译器?

c++ - std::vector<Object> 成员 C++ 的总和

c++ - Qt - 调整大小时避免白色背景(立即设置背景色)

c++ - qt - 如何通过 http 下载和保存图像?

c++ - rxcpp:嵌套的 while 循环或类似的 "classic"程序命令结构

c++ - CvRect 错误 C2661 : 'CvRect::CvRect' : no overloaded function takes 4 arguments opencv

qt - 我们如何知道字符串的宽度和高度?

c++ - 继承QFrame时未定义对vtable的引用

c++ - QScroller 和 QScrollBar 之间的 qt 冲突