LINUX.ORG.RU

QObject::connect


0

0

Имеется qt-приложение с 3-мя модулями:

- main.cpp
- data.cpp
- gui-actions.cpp

В main глобальной переменной объявлена структура (TConfig, описана в data.cpp) с указателем на главную форму first_f.
В функции CreateButton(TConfig *config) создаю радиокнопки. Я хочу связать сигнал toggle с функцией clickRB из модуля gui-actions.
При компиляции выдает следующее:

gui-actions.cpp:8: error: `TRadionButton' was not declared in this scope
gui-actions.cpp:8: error: `rb' was not declared in this scope
gui-actions.cpp:8: error: variable or field `clickRB' declared void
gui-actions.cpp:8: error: syntax error before `{' token
make: *** [.obj/gui-actions.o] Ошибка 1

---------------------------------------------------------------------------
Модуль main.cpp:

TConfig config;
main(){
...
CreateButton(&config);
...
}
---------------------------------------------------------------------------
Модуль data.cpp:

...
void CreateButton(TConfig *config){
char s[255];
for (int i = 0; i < config->nItem; i++){

QRadioButton *temp = new QRadioButton(config->item[i].caption, config->form, s);
temp->move(185, (30 + i*30));
temp->show();

//Связываем сигналы радио кнопок со слотами
QObject::connect(temp, SIGNAL(toggle()), config->app, SLOT(clickRB(*QRadioButton)));
}
}
---------------------------------------------------------------------------
Модуль gui-actions.cpp:

..
void clickRB(TRadionButton *rb){


}
---------------------------------------------------------------------------
Как должно быть чтобы я в функции clickRB имел доступ к config и чтоб все работало?

anonymous

> Как должно быть чтобы я в функции clickRB имел доступ к config и чтоб все работало?
Наверное нужно, чтобы в gui-actions.cpp была объявлена extern переменная вроде extern TConfig cfg;

Несколько замечаний:
1) Обычно Qt прилады строятся на ООП, а у Вас присутствуют несколько
глобальных функций, что по меньшей мере странно

2) QObject::connect(temp, SIGNAL(toggle()), config->app, SLOT(clickRB(*QRadioButton)));
a) Это опечатка (*QRadioButton)?
b) Зачем связывать сигнал без параметров и слот с параметром? Не уверен, что это и будет работать
c) Вы уверены, что у config->app есть _slot_ с именем clickRB? moc, по-моему, будет против :)

phoenix ★★★★
()

>>TConfig

Да, Дельфи нынче в моде. Уж писал бы хоть QConfig :)

Krasu
()
Ответ на: комментарий от anonymous

Надо сделать нормальное приложение, а не мешать С и С++. Зачем вообще структура TConfig ? Конфигурацию всегда можно считать с помошью QSettings или KConfig.

Типа того

class MyVBox : public QVBox
{
   Q_OBJECT

   MyVBox();
   ~MyVBox();

  public slots:
   void slotToggled(bool on);
};

MyVBox::MyBox() : QVBox()
{
  QRadioButton *b = new QRadioButton(this);
  b->show();

  connect(b, SIGNAL(toggled(bool)), this, SLOT(slotToggled(bool)));
}

void MyVBox::slotToggled(bool on)
{
  QMessageBox(this, (on)?QString("ON!"):QString("OFF!"), "", Ok);
}

Krasu
()
Ответ на: комментарий от Krasu

Уау, спасибо.
Это для меня новая информация.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.