Russian Qt Forum

Qt => Вопросы новичков => Тема начата: smirnoff от Май 16, 2011, 18:50



Название: Параметры в слоте, Почему не работает?
Отправлено: smirnoff от Май 16, 2011, 18:50
Есть код:
Код:
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()?


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: alexman от Май 16, 2011, 19:03
Откуда param то возьмется?


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: smirnoff от Май 16, 2011, 19:35
Откуда param то возьмется?

Передается в atimer указатель... оттуда и возьмется и передастся функции sync()


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: alexman от Май 16, 2011, 19:44
Откуда param то возьмется?

Передается в atimer указатель... оттуда и возьмется и передастся функции sync()
Почитай про сигналы-слоты...


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: lit-uriy от Май 16, 2011, 20:13
>>Передается в atimer указатель... оттуда и возьмется и передастся функции sync()
а по подробнее.


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: smirnoff от Май 16, 2011, 22:08
>>Передается в atimer указатель... оттуда и возьмется и передастся функции sync()
а по подробнее.
куда уж подробнее. я думаю задача ясна. необходимо найти решение. не уже ли никто с этим не сталкивался и не может привести пример кода?


Название: Re: Параметры в слоте, Почему не работает?
Отправлено: alexman от Май 16, 2011, 22:35
Попробуй так!
Код:
class Tmr : public QObject
{
   Q_OBJECT
public:
   Tmr()
   {
   }

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

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

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

private:
   char** _param;//только следи, чтобы указатель был валиден!
...

Но все же почитай про сигналы-слоты...