LINUX.ORG.RU

[Qt]Доступ до слота parent класса

 


0

1

Есть форма, на ней verticalLayout. Есть свой виджет GL_wgt (GL_wgt *glw), он добавляется на/в verticalLayout (ui->varticalLayout->addWidget(glw)). В GL_wgt переопределен метод

void GL_wgt::mousePressEvent(QMouseEvent *ev)
{
        int _x,_y;
        _x=ev->x();_y=ev->y();
}
Вопрос: как передать _x _y в mainwindow? (нужно вывести значение _x,_y после небольшых преобразований в label)

★★★★

Последнее исправление: ymuv (всего исправлений: 1)

В mainwindow добавить слот, принимающий (x, y). В GL_wgt - сигнал, посылающий (x, y). В GL_wgt::mousePressEvent - emit sendXY(_x, _y).

schizoid ★★★
()
Ответ на: комментарий от schizoid

Не могу найти ошибки пишет при старте:

Object::connect: No such signal QGLWidget::send_XY(int,int)
Object::connect:  (receiver name: 'MainWindow')
до слота сигнал не доходит.
//gl_wgt.cpp
void GL_wgt::mousePressEvent(QMouseEvent *ev){
int _x=ev->x();,_y=ev->y();
emit send_XY(_x,_y);}
//gl_wgt.h
signals: void send_XY(int _x,int _y){qDebug()<<"signal";}
//mainwindow.cpp
MainWindow::MainWindow../*конструктор*/ 
{/*code*/connect(glw,SIGNAL(send_XY(int,int)),this,SLOT(getXY(int,int)));}

void MainWindow::getXY(int X, int Y)
    {
        qDebug()<<"this is slot"<<X<<Y;
    }

//mainwindow.h
public slots: void getXY(int X,int Y);

На всякий случай сам клас:

//.h
#ifndef GL_WGT_H
#define GL_WGT_H
#include <QtGui>
#include <QGLWidget>
#include <QDebug>
#include <boost/thread.hpp>
//#include <QObject>
class GL_wgt:public QGLWidget{
    //Q_OBJECT
protected:
    virtual void initializeGL();
    virtual void resizeGL(int nWidth, int nHeight);
    virtual void paintGL();
    void mousePressEvent(QMouseEvent *event);

public:
    GL_wgt(QWidget* pwgt = 0);

signals:
    void send_XY(int _x,int _y){}

};
#endif // GL_WGT_H

Почему он обращается к сигналу QGLWidget(от которого класс наследуется) а не к самому классу?

ymuv ★★★★
() автор топика
Ответ на: комментарий от Begemoth

Выкидывало ошибку

mainwindow.o: In function `GL_wgt::~GL_wgt()':
mainwindow.cpp:(.text._ZN6GL_wgtD2Ev[_ZN6GL_wgtD5Ev]+0x13): undefined reference to `vtable for GL_wgt'
mainwindow.cpp:(.text._ZN6GL_wgtD2Ev[_ZN6GL_wgtD5Ev]+0x1f): undefined reference to `vtable for GL_wgt'
gl_wgt.o: In function `GL_wgt::GL_wgt(QWidget*)':
gl_wgt.cpp:(.text+0x44): undefined reference to `vtable for GL_wgt'
make: Leaving directory `/home/y/qt/sample'
gl_wgt.cpp:(.text+0x50): undefined reference to `vtable for GL_wgt'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [sample] Error 1
Процесс «/usr/bin/make» завершился с кодом 2.
Возникла ошибка при сборке проекта sample (цель: Desktop)
Во время выполнения сборки на этапе «Сборка»
У меня интернет вирубился чтоб посмотрето как решить. Решилось cd /path/tp/project && qmake && make -j4

ymuv ★★★★
() автор топика
Ответ на: комментарий от ymuv

Скалыдвается впечатление, что заголовочный файл с определением класса не перечислен в HEADERS в файле проекта и для него не вызывается moc

Begemoth ★★★★★
()
Ответ на: комментарий от VoofT

Уже решена.
Просто ругалось когда была строчка Q_OBJECT. Решилось:расскоментировал строчку, убрал {..} в сигнале потом cd /path/tp/project && qmake && make -j4.

ymuv ★★★★
() автор топика
Ответ на: комментарий от Begemoth

cd /path/tp/project && qmake && make -j4

ymuv ★★★★
() автор топика

>signals: void send_XY(int _x,int _y){qDebug()<<«signal»;}

//Q_OBJECT



Ё*банный стыд, ну хоть бы документацию сперва почитал, что ли. А вообще, судя по количеству говнокодеров, которые лезут на Qt, оно медленно и верно занимает нишу Delphi. Печально это всё.

thrall
()
Ответ на: комментарий от thrall

Спасибо на добром слове.
У меня интернет вырубился когда это писал, если раскометнтировать или убрать скобки ругается.

ymuv ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.