Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Martiro от Январь 14, 2013, 15:54



Название: Подключение сигналов/слотов
Отправлено: Martiro от Январь 14, 2013, 15:54
Есть 2 класса:
1-й:
Код
C++ (Qt)
class MainScene : public QGraphicsScene
{
public:
   MainScene();
public slots:
   void addScores(const QString &);
};
2-й:
Код
C++ (Qt)
class sectorAny : public QGraphicsItem {
public:
   sectorAny(QGraphicsItem * parent = 0, int iSideLen = 50, int iSide = 10, int iGipo = 13,
             QColor cr = Qt::black, QString strScore = "0")
   {
       //...........
   }
//...........
signals:
   void sendScore(QString str);
};
Пытаюсь в первом классе подключить второй:
Код
C++ (Qt)
MainScene::MainScene()
{
  for (int j = 0; j < 20 ; j++)
     {
 
               if (redGreen) cTmp = crRed;
               else cTmp = crGreen;
               sectorAny* sect1 = new sectorAny(0,iSide,10,13,cTmp,"d"+sScore[j]);
               addItem(sect1);
               sect1->translate(qX, qY);
               sect1->rotate(angle);
               QObject::connect(sect1,SIGNAL(sendScore(QString)),this,SLOT(addScores(QString)));
      }
}
Но на этапе сборки ругается... Пишет "condidates are:...", но разобраться как правильно написать я не могу.
Как вообще подключить свой сигнал к своему сигналу в связке QGraphicsScene/QGraphicsItem?


Название: Re: Подключение сигналов/слотов
Отправлено: Old от Январь 14, 2013, 16:10
Потому что QGraphicsItem не является наследником QObject и не может использовать сигналы.
Наследуйся от QGraphicsObject.


Название: Re: Подключение сигналов/слотов
Отправлено: gil9red от Январь 14, 2013, 16:19
Использование сигналов/слотов возможно при соблюдении двух условий:
1) наследование от класса QObject
2) написание в private класса Q_OBJECT


Название: Re: Подключение сигналов/слотов
Отправлено: Martiro от Январь 14, 2013, 16:40
Хм...
Сделал от QGraphicsObject.
Код
C++ (Qt)
class sectorAny : public QGraphicsObject{
public:
sectorAny(QGraphicsItem * parent = 0, int iSideLen = 50, int iSide = 10, int iGipo = 13,
QColor cr = Qt::black, QString strScore = "0")
{
//...........
}
//...........
signals:
void sendScore(QString str);
};
Теперь собирается, но при запуске пишет что не найден сигнал:
Цитировать
Object::connect: No such signal QGraphicsObject::sendScore(QString) in mainscene.cpp:62

 :-\


Название: Re: Подключение сигналов/слотов
Отправлено: Old от Январь 14, 2013, 16:44
Где Q_OBJECT?


Название: Re: Подключение сигналов/слотов
Отправлено: Martiro от Январь 14, 2013, 16:51
При добавлении
Код
C++ (Qt)
class sectorAny : public QGraphicsObject{
Q_OBJECT
public:
sectorAny(QGraphicsItem * parent = 0, int iSideLen = 50, int iSide = 10, int iGipo = 13,
QColor cr = Qt::black, QString strScore = "0")
{
//...........
не собирается и пишет
Цитировать
:-1: ошибка: collect2: ld returned 1 exit status


Название: Re: Подключение сигналов/слотов
Отправлено: Old от Январь 14, 2013, 16:54
Сделай clean проекту и пересобери его.
qmake не увидел, что этот класс теперь должен обрабатываться moc.


Название: Re: Подключение сигналов/слотов
Отправлено: kambala от Январь 14, 2013, 18:16
не собирается и пишет
Цитировать
:-1: ошибка: collect2: ld returned 1 exit status
166 постов и до сих пор не знаешь, что ошибки надо читать в «выводе компилятора»?