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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение сигналов/слотов  (Прочитано 3886 раз)
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?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Январь 14, 2013, 16:10 »

Потому что QGraphicsItem не является наследником QObject и не может использовать сигналы.
Наследуйся от QGraphicsObject.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Январь 14, 2013, 16:19 »

Использование сигналов/слотов возможно при соблюдении двух условий:
1) наследование от класса QObject
2) написание в private класса Q_OBJECT
Записан

Martiro
Гость
« Ответ #3 : Январь 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

 В замешательстве
« Последнее редактирование: Январь 14, 2013, 16:41 от Martiro » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Январь 14, 2013, 16:44 »

Где Q_OBJECT?
Записан
Martiro
Гость
« Ответ #5 : Январь 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
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Январь 14, 2013, 16:54 »

Сделай clean проекту и пересобери его.
qmake не увидел, что этот класс теперь должен обрабатываться moc.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #7 : Январь 14, 2013, 18:16 »

не собирается и пишет
Цитировать
:-1: ошибка: collect2: ld returned 1 exit status
166 постов и до сих пор не знаешь, что ошибки надо читать в «выводе компилятора»?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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