Russian Qt Forum
Ноябрь 23, 2024, 20:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование таймера  (Прочитано 3435 раз)
fredwriter
Гость
« : Апрель 23, 2015, 06:39 »

Здравствуйте, почему-то не компилируется код с использованием таймера.
Код
C++ (Qt)
#include <QApplication>
#include <QtCore>
#include <QtGui>
 
 
   QString ping_Around;
   QStringList arguments;
   QStringList arguments1;
   QStringList arguments2;
   QStringList arguments3;
   QProcess myProcess;
   QProcess myProcess1;
   QProcess myProcess2;
   QProcess myProcess3;
   QStringList strlstPingResults;
   QStringList strlstPingResults1;
   QStringList strlstPingResults2;
   QStringList strlstPingResults3;
   QStringList Ss[4];
   QGraphicsTextItem* itemText[4];
   QString count_Pack[4];
 
 
class myClass : public QGraphicsScene {
   Q_OBJECT
public:
       myClass(QObject *parent = 0);
       QTimer *timer;
 
public slots:
 void timer_overflow();
 
private:
       QGraphicsEllipseItem *item;
};
 
 
void myClass::timer_overflow() {
   ping_Around = "/bin/ping";
   arguments << "-c" << "4" << "10.31.3.130";
   arguments1 << "-c" << "4" << "10.31.4.130";
   arguments2 << "-c" << "4" << "10.31.5.130";
   arguments3 << "-c" << "4" << "10.31.6.130";
   myProcess.start(ping_Around, arguments);
   myProcess.waitForFinished(4000);
   myProcess1.start(ping_Around, arguments1);
   myProcess1.waitForFinished(4000);
   myProcess2.start(ping_Around, arguments2);
   myProcess2.waitForFinished(4000);
   myProcess3.start(ping_Around, arguments3);
   myProcess3.waitForFinished(4000);
 
   strlstPingResults<<myProcess.readAll();
   Ss[0] = strlstPingResults[0].split('\n');
   strlstPingResults1<<myProcess1.readAll();
   Ss[1] = strlstPingResults1[0].split('\n');
   strlstPingResults2<<myProcess2.readAll();
   Ss[2] = strlstPingResults2[0].split('\n');
   strlstPingResults3<<myProcess3.readAll();
   Ss[3] = strlstPingResults3[0].split('\n');
   for (int i = 0; i < 4; i++) {
       if (Ss[i].count() > 1) {
           count_Pack[i] = Ss[i][7].mid(23, 1);
       }
   }
   this->setSceneRect(QRectF(-90, 0, 15, 15));
 
   for (int i = 0; i < 4; i++) {
       if (count_Pack[i].count() > 0) {
           if (count_Pack[i] == "4") {
               item = new QGraphicsEllipseItem(0, this);
               item->setRect(QRectF(-90, -40 + (i * 16), 15, 15));
               item->setBrush(QBrush(Qt::green));
           }
       }
       else {
           item = new QGraphicsEllipseItem(0, this);
           item->setRect(QRectF(-90, -40 + (i * 16), 15, 15));
           item->setBrush(QBrush(Qt::red));
       }
   }
}
 
 
myClass::myClass(QObject *parent): QGraphicsScene(parent)
{
   timer = new QTimer;
   QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timer_overflow()));
   timer->start(16500);
//    ping_Around = "/bin/ping";
//    arguments << "-c" << "4" << "10.31.3.130";
//    arguments1 << "-c" << "4" << "10.31.4.130";
//    arguments2 << "-c" << "4" << "10.31.5.130";
//    arguments3 << "-c" << "4" << "10.31.6.130";
//    myProcess.start(ping_Around, arguments);
//    myProcess.waitForFinished(4000);
//    myProcess1.start(ping_Around, arguments1);
//    myProcess1.waitForFinished(4000);
//    myProcess2.start(ping_Around, arguments2);
//    myProcess2.waitForFinished(4000);
//    myProcess3.start(ping_Around, arguments3);
//    myProcess3.waitForFinished(4000);
//    
//    strlstPingResults<<myProcess.readAll();
//    Ss[0] = strlstPingResults[0].split('\n');
//    strlstPingResults1<<myProcess1.readAll();
//    Ss[1] = strlstPingResults1[0].split('\n');
//    strlstPingResults2<<myProcess2.readAll();
//    Ss[2] = strlstPingResults2[0].split('\n');
//    strlstPingResults3<<myProcess3.readAll();
//    Ss[3] = strlstPingResults3[0].split('\n');
//    for (int i = 0; i < 4; i++) {
//        if (Ss[i].count() > 1) {
//            count_Pack[i] = Ss[i][7].mid(23, 1);
//        }
//    }
//    this->setSceneRect(QRectF(-90, 0, 15, 15));
//
//    for (int i = 0; i < 4; i++) {
//        if (count_Pack[i].count() > 0) {
//            if (count_Pack[i] == "4") {
//                item = new QGraphicsEllipseItem(0, this);
//                item->setRect(QRectF(-90, -40 + (i * 16), 15, 15));
//                item->setBrush(QBrush(Qt::green));
//            }
//        }
//        else {
//            item = new QGraphicsEllipseItem(0, this);
//            item->setRect(QRectF(-90, -40 + (i * 16), 15, 15));
//            item->setBrush(QBrush(Qt::red));
//        }
//    }
 
}
 
 
int main(int argc, char *argv[]) {
   QApplication app(argc, argv);
   myClass m;
   QGraphicsView v(&m);
   v.setRenderHints(QPainter::Antialiasing);
   v.show();
   v.setGeometry(100, 100, 20, 100);
   return app.exec();
}
 

Это моя первая программа на Qt, с таймером еще не работал, по примеру сделал отсюда
Без таймера все работает отлично.
Вот вывод процесса сборки:
"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE=/usr/bin/qmake SUBPROJECTS= .build-conf
make[1]: Вход в каталог `/home/u0807/NetBeansProjects/QtApplication_2'
/usr/bin/qmake VPATH=. -o qttmp-Debug.mk nbproject/qt-Debug.pro
mv -f qttmp-Debug.mk nbproject/qt-Debug.mk
"/usr/bin/make" -f nbproject/qt-Debug.mk dist/Debug/GNU_1-Linux-x86/QtApplication_2
make[2]: Вход в каталог `/home/u0807/NetBeansProjects/QtApplication_2'
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -Inbproject -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -Inbproject -I. -o build/Debug/GNU_1-Linux-x86/main.o main.cpp
g++ -o dist/Debug/GNU_1-Linux-x86/QtApplication_2 build/Debug/GNU_1-Linux-x86/main.o -L/usr/lib/i386-linux-gnu -lQtGui -lQtCore -lpthread
build/Debug/GNU_1-Linux-x86/main.o: In function `myClass::myClass(QObject*)':
/home/u0807/NetBeansProjects/QtApplication_2/main.cpp:91: undefined reference to `vtable for myClass'
build/Debug/GNU_1-Linux-x86/main.o: In function `myClass::~myClass()':
/home/u0807/NetBeansProjects/QtApplication_2/main.cpp:30: undefined reference to `vtable for myClass'
collect2: error: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU_1-Linux-x86/QtApplication_2] Ошибка 1
make[2]: Выход из каталога `/home/u0807/NetBeansProjects/QtApplication_2'
make[1]: *** [.build-conf] Ошибка 2
make[1]: Выход из каталога `/home/u0807/NetBeansProjects/QtApplication_2'
make: *** [.build-impl] Ошибка 2

СОБРАТЬ FAILED (значение выхода 2,, общее время: 4s)
« Последнее редактирование: Апрель 23, 2015, 07:21 от fredwriter » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Апрель 23, 2015, 07:07 »

Раскидайте класс по h и срр файлам
Записан

fredwriter
Гость
« Ответ #2 : Апрель 23, 2015, 07:24 »

Раскидайте класс по h и срр файлам
Попробую конечно, в моём посте первом есть ссылка (забыл сразу добавить) так там пример использования таймера, и нет никакого разбиения по h и cpp файлам. Это точно должно помочь?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Апрель 23, 2015, 07:48 »

Точно Улыбающийся
Записан

fredwriter
Гость
« Ответ #4 : Апрель 23, 2015, 07:51 »

Тогда мне что нужно только объявление класса в h файл закинуть, или и описание в отдельный cpp файл поместить?
Записан
fredwriter
Гость
« Ответ #5 : Апрель 23, 2015, 07:58 »

Реально помогло, офигеть можно, а что так то не работает?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Апрель 23, 2015, 08:48 »

Это заморочки Qt Улыбающийся
Просто, в текущей форме в main'е лучше классы, наследуемые от QObject с Q_OBJECT, не оставлять Улыбающийся
Записан

Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Апрель 23, 2015, 08:52 »

Это заморочки Qt Улыбающийся
Просто, в текущей форме в main'е лучше классы, наследуемые от QObject с Q_OBJECT, не оставлять Улыбающийся
Достаточно просто внизу приинклудить main.moc.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 22.