QObject :: connect: Нет такого сигнала: Как мне создать подкласс и подключить определенный пользователем слот, когда connect не распознает сигнал? - PullRequest
0 голосов
/ 11 февраля 2019

Qt5 не распознает сигнал, определенный в моем заголовке glwidget.h, который является подклассом QOpenGLWidget.

Я изменил объявление класса для наследования QObject, а не QWidget, однако созданный glwidgetв конструкторе, а затем повышен до подкласса, не отображается, если он не унаследован от QWidget.

//////////////
//glwidget.h//
//////////////

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QObject>
#include <QWidget>
#include <QOpenGLWidget>
#include <QMouseEvent>

class glwidget : public QOpenGLWidget
{

    Q_OBJECT

public:
    explicit glwidget(QWidget *parent = nullptr);

protected:
    void mouseMoveEvent(QMouseEvent *mouse_event);

signals:
    void sendMousePosition(QPoint& pos);

};

#endif // GLWIDGET_H
////////////////
//glwidget.cpp//
////////////////

#include "glwidget.h"

glwidget::glwidget(QWidget *parent) : QOpenGLWidget(parent)
{

    this->setMouseTracking(true);

}


void glwidget::mouseMoveEvent(QMouseEvent *mouse_event)
{
    QPoint mouse_pos = mouse_event->pos();

    if(mouse_pos.x() <= this->size().width() && \
       mouse_pos.y() <= this->size().height())
    {
        if (mouse_pos.x() >= 0 && mouse_pos.y() >= 0)
        {

            emit sendMousePosition(mouse_pos);

        }
    }
}
//////////////////
//mainwindow.cpp//
//////////////////

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

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), 
     ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(ui->openGLWidget_1,SIGNAL(sendMousePosition(Qpoint&)), \ 
                     this,SLOT(showMousePosition(QPoint&)));
}

void MainWindow::showMousePosition(QPoint &pos)
{
    ui->mouse_position_label->setText("x: " + QString::number(pos.x()) + \
                                      ", y: " +  QString::number(pos.y()));
}

События мыши с подклассами регистрируются правильно, однако даже при очистке, qmake исборка запущена, приложение выводит:

QObject::connect: No such signal glwidget::sendMousePosition(Qpoint&)
QObject::connect:  (sender name:   'openGLWidget_1')
QObject::connect:  (receiver name: 'MainWindow')

Требуемый сигнал подключения не распознается и не регистрируется.

1 Ответ

0 голосов
/ 11 февраля 2019

«Это должен быть QPoint вместо Qpoint» - решено

...