Есть класс MyView, унаследованный от QCanvasView. Есть класс MyLine, унаследованный от QCanvasLine. Нужно передать сигнал от объекта класса MyView в слот объекта класса MyLine. Пытаюсь делать следующим образом
//MyView.h
#ifndef MYVIEW_H
#define MYVIEW_H
#include <qcanvas.h>
class QPoint;
class MyView : public QCanvasView
{
Q_OBJECT
public:
MyView(QCanvas* canvas, QWidget* parent = 0, const char* name = 0);
signals:
void transmitCoords(QPoint&);
protected:
void contentsMousePressEvent(QMouseEvent* event);
private:
QCanvasItem* item;
};
#endif // MYVIEW_H
//MyView.cpp
#include <qcanvas.h>
#include <qpoint.h>
#include "MyLine.h"
#include "MyView.h"
void receiveCoords(QPoint&);
MyView::MyView(QCanvas* canvas, QWidget* parent, const char* name)
:QCanvasView(canvas, parent, name)
{
item = 0;
}
void MyView::contentsMousePressEvent(QMouseEvent* event)
{
item = new MyLine(canvas());
QPoint position = event->pos();
connect(this, SIGNAL(transmitCoords(QPoint&)), (QObject*)item, SLOT(receiveCoords(QPoint&)));
emit transmitCoords(position);
}
//MyLine.h
#ifndef MYLINE_H
#define MYLINE_H
#include <qcanvas.h>
class MyLine : public QCanvasLine
{
public:
MyLine(QCanvas* canvas);
public slots:
void receiveCoords(QPoint&);
};
#endif // MYLINE_H
//MyLine.cpp
#include <qcanvas.h>
#include <qpoint.h>
#include "MyLine.h"
MyLine::MyLine(QCanvas* canvas)
:QCanvasLine(canvas)
{}
void MyLine::receiveCoords(QPoint& position)
{
//Некоторая обработка
}
//main.cpp
#include <qapplication.h>
#include <qcanvas.h>
#include "MyView.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QCanvas* canvas = new QCanvas(400, 400);
MyView* diagram = new MyView(canvas);
app.setMainWidget(diagram);
diagram->show();
return app.exec();
}
На функции connect вываливается ошибка “Segmentation fault”. Что бы мне сделать, чтобы все заработало? (Использую QT3)
И попутно вопрос: почему в connect требуется явное приведение типа? (без него не компилируется)