Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Qt connect

316
16 сентября 2011 года
Alm3n
889 / / 29.05.2009
Доброго. Есть класс:
Код:
class OGLForm : public QGLWidget
{

public:
    explicit OGLForm(QWidget *parent,int scrn_size_x, int scrn_size_y);
    void draw(int x, int y, GLenum type);

    float ball_posx;
    float ball_posy;
    int ball_r;
    int ssx;
    int ssy;
    QTimer* time1;
    QPoint mouse_point;
    GLuint nomer_disp_spiska_objectov;

protected:
    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();

    //virtual void mousePressEvent(QMouseEvent * pe);
    virtual void mouseMoveEvent(QMouseEvent * pe);

public slots:
    void alarm();

};

конструктор и слот:
Код:
OGLForm::OGLForm(QWidget *parent, int scrn_size_x, int scrn_size_y) :
    QGLWidget(parent)
{
    time1 = new QTimer;
    ssx=scrn_size_x;
    ssy=scrn_size_y;
    ball_posx=ssx/2;
    ball_r=20;
    ball_posy=ssy-ball_r;
    QObject::connect(time1, SIGNAL(QTimer::timeout()),this,SLOT(alarm()));
    time1->start(500);
}

Код:
void OGLForm::mouseMoveEvent(QMouseEvent *pe)
{
    mouse_point=pe->pos();
}

void OGLForm::alarm()
{
    ball_posx=mouse_point.x();
    ball_posy=mouse_point.y();
    updateGL();
}

Почему может connect не срабатывать? Возвращает false. Пробовал уже по-разному параметры передавать - и с оператором расширения видимости, и без него. Не срабатывает alarm. Таймер создаётся. Qt 4.7.4
14
16 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
Если вы продебажите connect все станет понятным. Я так выяснил причины своего неконнекта.
316
17 сентября 2011 года
Alm3n
889 / / 29.05.2009
Дебаг помог. Саначала не мог найти сигнал в QTimer::Qtimer::timeout();
Починилось всё убиранием оператора расширения видимости из
Цитата:

QObject::connect(time1, SIGNAL([COLOR="mediumturquoise"]QTimer::[/COLOR]timeout()),this,SLOT(alarm()));


А потом:

Цитата:

Object::connect: No such slot QGLWidget::alarm() in oglform.cpp:13


Почему-то слот ищется не в моём классе. Как это можно поправить?

UPD: Всё починил. Нужен был макрос Q_OBJECT, от которого я избавился из-за ошибок сборки, потому что не линковались moc файлы, потому что в *.pro прописал TARGET отличный от каталога с moc'овским объектным. Вот так вот...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог