crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Параметры в слоте, Почему не работает?
smirnoffx
  опции профиля:
сообщение 16.5.2011, 18:50
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 6.11.2010
Пользователь №: 2173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть код:
class Tmr : public QObject
{
   Q_OBJECT
public:
   Tmr()
   {
   }

public slots:
   void sync(char* param[])
   {
        if(dbconnect("QODBC3", param[1]))
        {
            exportMR();
        }
   }

   void atimer(int msec, char* param[])
   {
       QTextStream out(stdout);
       QTimer::singleShot(msec, this, SLOT(sync(char* param[])));

       out << "Beginning of work..." << endl;
   }
...


Однако при запуске пишет: QObject::connect: No such slot Tmr::sync(char* param[]) in ...
Как с этим бороться? Как передать параметры в функцию sync()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 16.5.2011, 19:22
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


1) Почему бы функции не описывать в .cpp?
2) char* param[]. Может проще будет с QString или QStringList?
3) Вы как в cpp функции вызываете?

PS: для вывода рекомендую
qDebug()<<"some thing";
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
smirnoffx
  опции профиля:
сообщение 16.5.2011, 19:40
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 6.11.2010
Пользователь №: 2173

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(RazrFalcon @ 16.5.2011, 20:22) *
1) Почему бы функции не описывать в .cpp?
2) char* param[]. Может проще будет с QString или QStringList?
3) Вы как в cpp функции вызываете?

PS: для вывода рекомендую
qDebug()<<"some thing";


1) мне так удобнее
2) с char* привычнее
3) в main() создается объект
Tmr tobj;
    tobj.atimer(2000, argv);
и вызывается atimer в который передаются параметры argv консоли. Эти параметры и необходимо передать в функцию sync()...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 16.5.2011, 19:55
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


tobj.sync(argv);
???
PS: При чем тут вообще qt?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.5.2011, 20:13
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


smirnoffx, в функции connect() не указывают имя переменной, а только тип.
следовательно должно быть так:
QTimer::singleShot(msec, this, SLOT(sync(char* /*param[]*/)));
но это не та сигнатура, которая задумана.
Следовательно тебе нужно исправить весь слот на такой:
   void sync(char** param)
   {
        if(dbconnect("QODBC3", param[1]))
        {
            exportMR();
        }
   }
и соответсвующий вызов:
QTimer::singleShot(msec, this, SLOT(sync(char**)));


Цитата(RazrFalcon @ 16.5.2011, 22:22) *
1) Почему бы функции не описывать в .cpp?
стоит это делать именно в *.cpp, чтобы не ломать себе потом голову с ошибками линкера по поводу vtable и не партися с #include main.moc

Но это всё во-вторых.

А во-первых, посмотри какой сигнал генерит QTimer и подойдёт ли этому сигналу сигнатура твоего слота.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 21:33