Russian Qt Forum

Qt => Вопросы новичков => Тема начата: koldun90 от Август 24, 2014, 17:53



Название: вопрос про событие
Отправлено: koldun90 от Август 24, 2014, 17:53
Здравствуйте. Вопрос следующий.
Мне нужно допустим чтобы моя запущенная программа каждые 10 сек выводила сообщение (одно и тоже)
собственно код простой использовать Qtime и QMessageBox.
Но вот где этот код нужно писать.
Поясню допустим вы запустили программу что в ней делаете кликаете и тд и тп, но независимо от ваших действий каждые 10 секунд работы программы появляется сообщение
Те мне нужно понять где как бы писать сам код... или какой метод переопределять....


Название: Re: вопрос про событие
Отправлено: Old от Август 24, 2014, 17:56
В MainWindow.
И вы наверное имели виду Timer.


Название: Re: вопрос про событие
Отправлено: koldun90 от Август 24, 2014, 18:40
да qtimer

 просто допустим вот вы запустили прогу и даже ничего не нажимая(вообщем вне зависимости от ваших действий ) каждые 10 сек появляется сообщение
но ведь вы говорите писать в mainwinodow.cpp в конструкторе(при запуске программы) там код этот не выполнится


Название: Re: вопрос про событие
Отправлено: Bepec от Август 24, 2014, 18:44
Писать в конструкторе. Инициализируя таймер и привязывая его к слоту. И таймер каждые N будет вызывать слот.


Название: Re: вопрос про событие
Отправлено: koldun90 от Август 24, 2014, 19:02
Спасибо разобрался так вроде работает
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timer=new QTimer(this);

    timer->start();
    timer->setInterval(10000);
    connect(timer,SIGNAL(timeout()),this,SLOT(soobch()));


}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::soobch()
{
    QMessageBox msg;
    msg.setText(QString::fromLocal8Bit("ПРИВЕТ"));
    msg.exec();
}



Название: Re: вопрос про событие
Отправлено: 8Observer8 от Август 26, 2014, 13:37
Ещё можете в Help'e забить: startTimer

Там такой пример есть:
Код
C++ (Qt)
class MyObject : public QObject
{
   Q_OBJECT
 
public:
   MyObject(QObject *parent = 0);
 
protected:
   void timerEvent(QTimerEvent *event);
};
 
MyObject::MyObject(QObject *parent)
   : QObject(parent)
{
   startTimer(50);     // 50-millisecond timer
   startTimer(1000);   // 1-second timer
   startTimer(60000);  // 1-minute timer
}
 
void MyObject::timerEvent(QTimerEvent *event)
{
   qDebug() << "Timer ID:" << event->timerId();
}


Название: Re: вопрос про событие
Отправлено: 8Observer8 от Август 26, 2014, 13:41
А если по вашему примеру, то так:

MainWindow.h
Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QTime>
 
namespace Ui {
   class MainWindow;
}
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
   explicit MainWindow(QWidget *parent = 0);
   ~MainWindow();
 
   void timerEvent( QTimerEvent *event );
 
private:
   Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H
 

MainWindow.cpp
Код
C++ (Qt)
 
#include <QDebug>
#include "MainWindow.h"
#include "ui_MainWindow.h"
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   startTimer( 5000 );
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::timerEvent(QTimerEvent *event)
{
   qDebug() << "timerEvent";
}