Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Не запускается QTimer. Вообще!


Автор: wowka19 16.1.2014, 22:28
в коде один лишь конструктор:

Код

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_timeList_ = new QList<QTime>;

    m_sound_ = new QSound("superman.wav");
    m_sound_->setLoops(-1);
    isPlay = false;
    m_lastPos = QCursor::pos();


    QWidget * centralWidget = new QWidget;
    setCentralWidget(centralWidget);
    m_vBoxLayout = new QVBoxLayout(centralWidget);

    QFile file("schedule.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return;

    while (!file.atEnd())
    {
        QByteArray line = file.readLine();
        QTime temp(line.split(':').at(0).trimmed().toInt(), line.split(':').at(1).trimmed().toInt());
        m_timeList_->push_back(temp);
    }
    qSort(m_timeList_->begin(), m_timeList_->end());

    for (int i = 0; i < m_timeList_->count(); ++i)
    {
        QLabel *temp = new QLabel(m_timeList_->at(i).toString());
        m_labelList->push_back(temp);
        m_vBoxLayout->addWidget(m_labelList->back());
    }

    m_nextTimeNumber_ = 0;
    for (int i = 0; i < m_timeList_->count(); ++i)
    {
        if (m_timeList_->at(i) > QTime::currentTime())
        {
            m_nextTimeNumber_ = i;
            break;
        }
    }

    connect(&t, SIGNAL(timeout()), this, SLOT(close()));
    t.start(2000);
}

- таймер не срабатывает!!!

для справки вот это работает:
Код

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    connect(&t, SIGNAL(timeout()), this, SLOT(close()));
    t.start(2000);
}


т.е. код выше как-то перебивает работу таймера

что за черт???

Автор: Guinness 17.1.2014, 07:15
Цитата(wowka19 @  16.1.2014,  23:28 Найти цитируемый пост)
т.е. код выше как-то перебивает работу таймера

А код выше срабатывает без ошибок? Т.е. программа доходит до выполнения инструкции t.start(2000)?

Автор: Alexiski 17.1.2014, 08:48
Судя по коду, Вы, вероятно, надеетесь что таймер каким-то мистическим образом прервет вычисления, проводимые в конструкторе. Это не так. Событие таймера произойдет только после завершения работы конструктора.

Автор: bsa 17.1.2014, 10:11
wowka19, что такое t? Где и как оно объявлено? Когда ты ожидаешь срабатывания таймера?

Автор: ALEXRAGE 17.1.2014, 15:29
А точно доходит до строчки t.start(2000);
Что-то мне подсказывает, что цикл while (!file.atEnd()) никогда не прервется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)