Russian Qt Forum
Май 02, 2024, 01:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача сигнала от QCanvasView  (Прочитано 3692 раз)
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 требуется явное приведение типа? (без него не компилируется)
Записан
Dendy
Гость
« Ответ #1 : Февраль 27, 2006, 20:18 »

Дружище! Вот тебе ответ сразу на все вопросьІ:

QCanvasItem не порождён от QObject!

Отсюда и явное приведение типа и кернел паник в методе connect.

Веселый
Записан
firix
Гость
« Ответ #2 : Февраль 27, 2006, 20:32 »

Мда, действительно. Так что, значит никоим образом сигнал таким объектам передать не получится?
Записан
Hordi
Гость
« Ответ #3 : Февраль 27, 2006, 20:53 »

Это примитивы для рисования. Зачем им сигналы?
Есди именно тебе нужнны сигналы, то извратиться всегда можно - создавай QCanvasItem внутри QObject или как угодно иначе - тут маса вариантов...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 20.