LINUX.ORG.RU

Не получается заюзать таймер в QT.


0

0

Проблема такая. Есть класс моего приложения, оно является наследником моего виджета который в свою очередь является наследником QWidget. В нём есть обьект который так же является обьектом моего класса. Так вот в классе этого обьекта я обьявляю таймер, и его сигнал соединяю со слотом моего класса.

Хидер:

class ldmUsersBlock : public QWidget
{
public:

ldmUsersBlock ( QWidget *parent, int num_users );
~ldmUsersBlock ( );

void setUsers ( Users *users );
void setGeometry ( int x_size, int y_size, int x_pos, int y_pos );

void moveUP ( );
void moveDN ( );

void mouseMoveEvent ( QMouseEvent * e );

QTimer *t;

private:
int num_users, flup, fldn;
ldmUsers *users;

private slots:
void moveUsers ( );
};

Сишник:

....
t = new QTimer ( this );
connect ( t, SIGNAL ( timeout ( ) ), SLOT ( moveUsers ( ) ) );
....
void ldmUsersBlock::moveUsers ( )
{
if ( flup == 1 ) moveDN ( );
if ( fldn == 1 ) moveUP ( );
}

Так вот, это не работает, после запуска мне вылетает следущая мессага и таймер соответственно не работает.

QObject::connect: No such slot QWidget::moveUsers()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')

Может кто знает почему соединение не происходит, ведь таймер обьявлен...

Заранее спасибо!!!

★★★★★

connect ( t,

SIGNAL ( timeout ( ) ),

SLOT ( moveUsers ( ) ) );

4 аргумента надо, а не 3 /хотя могу чё-нидь путать/

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

connect ( t,

SIGNAL ( timeout ( ) ),

SLOT ( moveUsers ( ) ) );

можно и так и так, т.е. и 3 и 4. Если конект внутри класса и относиться к самому классу то this можно опустить, если же коннект не принадлежит к нему или лежит вне класса то надо явно указывать обьект для соединения. Я вызываю его внутри класса и могу опускать this, но я так же пробовал указать его явно, но это не помогло.

У мя складывается такое ощущение что конект не видит обьекты. Я сделал в классе для проверки лейбл и попытался законектить таймер на move () но и это окончилось сообщением о том что нет слота. Но похоже это не работает не только с таймером.

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

Вот млин, а я думаю - чего то не хватает :)

cyclon ★★★★★
() автор топика
Ответ на: комментарий от Pi

Млинн а ща проблема с эим макросом. Т.е. я его разместил в том классе который описал выше, но он как и положено не определён в дрггих. Так вот, есть другой класс в нём тоже надо сделать конект. Но обьявление этого макроса вызвало появление сообщщений:

ldmusers.o(.text+0x2f): In function `ldmUsers::ldmUsers[not-in-charge](QWidget*)':
/usr/qt/3/include/qobject.h:229: undefined reference to `vtable for ldmUsers'
ldmusers.o(.text+0x3b): In function `ldmUsers::ldmUsers[not-in-charge](QWidget*)':
/usr/qt/3/include/qstring.h:850: undefined reference to `vtable for ldmUsers'
ldmusers.o(.text+0x1a3): In function `ldmUsers::ldmUsers[in-charge](QWidget*)':
/home/alexandr/Documents/Coding/C++/MyProjects/ldm/src/ldmusers.cpp:23: undefined reference to `vtable for ldmUsers'
ldmusers.o(.text+0x1af):/home/alexandr/Documents/Coding/C++/MyProjects/ldm/src/l dmusers.cpp:23: undefined reference to `vtable for ldmUsers'
ldmusers.o(.text+0x2f3): In function `ldmUsers::~ldmUsers [not-in-charge]()':
/home/alexandr/Documents/Coding/C++/MyProjects/ldm/src/ldmusers.cpp:39: undefined reference to `vtable for ldmUsers'
ldmusers.o(.text+0x2ff):/home/alexandr/Documents/Coding/C++/MyProjects/ldm/src/l dmusers.cpp:39: more undefined references to `vtable for ldmUsers' follow
collect2: ld returned 1 exit status
make: *** [ldm] Ошибка 1

но если убрать его то всё собирается нормально но запуск кончается сообщением об отсутствующем слоте (см. выше). При чём эти же мессаги выскакивали и тогда когда этот макрос первый раз я обьявлял в указанном классе, но убрать их получилось добавив в свойства проекта -lqt. Когда я добавлял второй раз этот максрос в другой класс, т.е. он обьявлен два раза, то получил указанные выше сообщения об ошибках undef'ов. Т.е. добавить вроде как и нечего.


Как это исправить.

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