2015-04-13 5 views
1

QMouseEvent хранит целочисленное значение положения мыши. Однако он имеет элемент защиты, в котором хранится значение поплавка положения мыши. Как я могу получить значение float?Как я могу получить доступ к защищенному члену в QMouseEvent, чтобы получить значение float в позиции мыши? [Разработчики Qt]

Я пробовал наследовать QMouseEvent, но, к сожалению, я все время получаю это сообщение об ошибке.

error: C2511: 'QMouseEventF::QMouseEventF(QWidget *)' : overloaded member function not found in '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 

А вот унаследованный класс:

#include "qmouseeventf.h" 


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

} 


QMouseEventF::~QMouseEventF() 
{ 

} 


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

Что относительно QMouseEvent :: windowPos() и QMouseEvent :: screenPos()? Они являются общедоступными – demonplus

+0

Вы правы, но они являются целыми значениями, где мне нужно значение float. Значение поплавка хранится в защищенном элементе. – Nai

+0

Оба возвращают QPointF http://doc.qt.io/qt-5/qpointf.html#setX. Это точность с плавающей запятой – demonplus

ответ

1

С одной стороны, у вас есть различные подписи между заголовком и исходный файл, так как заголовок конструктор отличается от конструктора источника. QMouseEvent не наследуется от QObject или QWidget.

Во-вторых, QMouseEvent не принимает QWidget * для конструктора.

В-третьих, нет необходимости в макросе Q_OBJECT в заголовке.

Это причины для правильности кода. Чтобы ответить на ваш первоначальный вопрос, было бы бессмысленно использовать значение float, так как целочисленное значение - это то, что события мыши работают с пиксельными координатами. Если вам нужно преобразовать его в float, сделайте это самостоятельно, выполнив кастинг.

+0

Спасибо, ваш совет помогает мне решить сообщение об ошибке, но в то же время это вызывает еще одну проблему! Теперь мышьMoveEvent НЕ запускается! – Nai

 Смежные вопросы

  • Нет связанных вопросов^_^