Название: Передача сигнала от QCanvasView
Отправлено: firix от Февраль 27, 2006, 19:36
Есть класс 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 требуется явное приведение типа? (без него не компилируется)
Название: Передача сигнала от QCanvasView
Отправлено: Dendy от Февраль 27, 2006, 20:18
Дружище! Вот тебе ответ сразу на все вопросьІ:
QCanvasItem не порождён от QObject!
Отсюда и явное приведение типа и кернел паник в методе connect.
:D
Название: Передача сигнала от QCanvasView
Отправлено: firix от Февраль 27, 2006, 20:32
Мда, действительно. Так что, значит никоим образом сигнал таким объектам передать не получится?
Название: Передача сигнала от QCanvasView
Отправлено: Hordi от Февраль 27, 2006, 20:53
Это примитивы для рисования. Зачем им сигналы? Есди именно тебе нужнны сигналы, то извратиться всегда можно - создавай QCanvasItem внутри QObject или как угодно иначе - тут маса вариантов...
|