Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问QMouseEvent中的受保护成员以获取鼠标位置的浮点值?[Qt开发者]_Qt_Inheritance_Mouseevent_Mouse Position_Qmouseevent - Fatal编程技术网

如何访问QMouseEvent中的受保护成员以获取鼠标位置的浮点值?[Qt开发者]

如何访问QMouseEvent中的受保护成员以获取鼠标位置的浮点值?[Qt开发者],qt,inheritance,mouseevent,mouse-position,qmouseevent,Qt,Inheritance,Mouseevent,Mouse Position,Qmouseevent,QMouseEvent存储鼠标位置的整数值。 但是,它有一个保护成员“s”,它存储鼠标位置的浮点值。 如何获取浮点值 我已尝试继承QMouseEvent,但不幸的是,我一直收到此错误消息 错误:C2511:'QMouseEventF::QMouseEventF(QWidget*)':重载 在“QMouseEventF”中找不到成员函数 这是我的头文件: #ifndef QMOUSEEVENTF_H #define QMOUSEEVENTF_H #include<QMouseEvent&g

QMouseEvent
存储鼠标位置的整数值。 但是,它有一个保护成员“s”,它存储鼠标位置的浮点值。 如何获取浮点值

我已尝试继承
QMouseEvent
,但不幸的是,我一直收到此错误消息

错误:C2511:'QMouseEventF::QMouseEventF(QWidget*)':重载 在“QMouseEventF”中找不到成员函数

这是我的头文件:

#ifndef QMOUSEEVENTF_H
#define QMOUSEEVENTF_H

#include<QMouseEvent>

class QMouseEventF : QMouseEvent
{
    Q_OBJECT

    public:
    QMouseEventF(QObject* parent = 0);

    ~QMouseEventF();
    qreal GetX();

};

#endif // QMOUSEEVENTF_H

首先,头文件和源文件之间的签名不同,因为头构造函数不同于源构造函数。QMouseEvent不从QObject或QWidget继承

其次,QMouseEvent不采用QWidget*作为构造函数

第三,头中不需要Q_OBJECT宏


这些就是代码正确性的原因。为了回答最初的问题,使用浮点值是没有意义的,因为整数值是鼠标事件对像素坐标的操作。如果需要将其转换为float,您可以通过强制转换来实现。

QMouseEvent::windowPos()和QMouseEvent::screenPos()如何?它们是公共的,你是对的,但它们是整数值,我需要浮点值。浮点值存储在受保护的成员中。两者都返回QPointF。这是浮点精度谢谢,我试过使用QPointF。它用于存储和返回鼠标位置的浮点。但不幸的是,尽管它被定义为浮点类型,但实际上它存储了一个整数值。这是完全正常的,因为它是像素。我确信,如果您签入调试器,您的受保护成员将具有类似的值。谢谢,您的建议帮助我解决了错误消息,但同时它会导致另一个问题!mouseMoveEvent现在不会被触发!
#include "qmouseeventf.h"


QMouseEventF::QMouseEventF(QWidget *parent ): QMouseEvent(parent)
{

}


QMouseEventF::~QMouseEventF()
{

}


qreal QMouseEventF::GetX()
{
    return this->s.rx();
}