Set Delay Timer
-
@mpergand said in Set Delay Timer:
Pretty and clean isn't it ?
No it is not. it uses 75% of one of my CPU cores for absolutely nothing
@VRonin said in Set Delay Timer:
No it is not. it uses 75% of one of my CPU cores for absolutely nothing
For .3 sec not a big deal.
I agree, that it's should by used for short period only (< 1 sec)The main drawback I know (i use the same principle on MacOS) is that it can leading to some reentrant call in some cases.
-
@VRonin said in Set Delay Timer:
No it is not. it uses 75% of one of my CPU cores for absolutely nothing
For .3 sec not a big deal.
I agree, that it's should by used for short period only (< 1 sec)The main drawback I know (i use the same principle on MacOS) is that it can leading to some reentrant call in some cases.
-
@mpergand said in Set Delay Timer:
For .3 sec not a big deal.
It is. especially on mobile/embedded hardware. it's just bad design especially when alternatives based of QEventLoop exist (but of course use the async is ALWAYS the best design)
@VRonin said in Set Delay Timer:
It is. especially on mobile/embedded hardware. it's just bad design especially when alternatives based of QEventLoop exist (but of course use the async is ALWAYS the best design)
Ok, add a small QThread::sleep should do the job as well.
Please, can you post an example of a wait function with a QEventLoop instead.
-
add a small QThread::sleep should do the job as well
it does not, reason in link below
can you post an example of a wait function with a QEventLoop instead.
https://forum.qt.io/topic/78715/why-my-timer-is-not-emit-timeout-signal
-
WOW. All the discussion :)
First off all, thx for the answer.
I have one more question to fullfill my Project. I dont want to start new Topic.I have a class GameKonfiguration
and class MainWindow
and the main()#include "Konfiguration.h" #include "MainWindow.h" int main(int argc, char *argv[]) { // initialize resources, if needed // Q_INIT_RESOURCE(resfile); QApplication app(argc, argv); MainWindow *window = new MainWindow(&app); window->show(); Konfiguration *konfiguration = new Konfiguration(&app,window); konfiguration->show(); return app.exec(); }
in main
Now I make this Programm so far, that when i start, both Windows open and i can Change configuration and the gamefield show and user can Play and actually i can quit the game via configuration. everything fine
Now I want to Combine the menu bar from mainwindow and use the menu bar to open my configuration window.
However the Problem i have is now, i cant include Header a in Header b and Header b in Header a.// mainwindow Header file #include "ui_MainWindow.h" #include <QApplication> //some Header here //try #include "Konfiguration.h" //-- not work because in Konfiguration.h i already include mainwindow.h in oder to use for the Slot etc using namespace std; class MainWindow : public QMainWindow { Q_OBJECT private: Ui::MainWindow widget; QApplication *app; // Try Konfiguration *confi; public: MainWindow(QApplication*); //some function signals: public slots: // function etc ........ void openConfi(); }; // in mainwindow.cpp // Open Game Configuration QObject::connect(widget.SpielKonfiguration,SIGNAL(triggered()),this,SLOT(openConfi())); // End Game QObject::connect(widget.SpielBeenden,SIGNAL(triggered()),app,SLOT(quit())); // Configuration Window void MainWindow::openConfi(){ // in this Slot , the configuration window should open confi->show(); }
Konfiguration.h and cpp
#ifndef KONFIGURATION_H #define KONFIGURATION_H #include <QApplication> #include "MainWindow.h" // some Header here.... class Konfiguration : public QDialog{ Q_OBJECT private: QApplication *app; // here i create mainwindow pointer to Setup the gamefield MainWindow *spielFenster; //some code here public: Konfiguration(QApplication*, MainWindow*); virtual ~Konfiguration(); public slots: void clearText(); // void updateTextN(QString); // void updateTextM(QString); }; //konfiguration.cpp // use the mainwindow pointer to set Slot //Set N, M in VerschiebeSpiel QObject::connect(editN,SIGNAL(textChanged(QString)),spielFenster,SLOT(setN(QString))); QObject::connect(editM,SIGNAL(textChanged(QString)),spielFenster,SLOT(setM(QString)));
So how can I open the Konfiguration Window via the Menu bar of Mainwindow but I can still use the Konfiguration to configure the MainWindow ?
Muss be simple for you guys, but quite hard for newbie :)
thx for your help
-
WOW. All the discussion :)
First off all, thx for the answer.
I have one more question to fullfill my Project. I dont want to start new Topic.I have a class GameKonfiguration
and class MainWindow
and the main()#include "Konfiguration.h" #include "MainWindow.h" int main(int argc, char *argv[]) { // initialize resources, if needed // Q_INIT_RESOURCE(resfile); QApplication app(argc, argv); MainWindow *window = new MainWindow(&app); window->show(); Konfiguration *konfiguration = new Konfiguration(&app,window); konfiguration->show(); return app.exec(); }
in main
Now I make this Programm so far, that when i start, both Windows open and i can Change configuration and the gamefield show and user can Play and actually i can quit the game via configuration. everything fine
Now I want to Combine the menu bar from mainwindow and use the menu bar to open my configuration window.
However the Problem i have is now, i cant include Header a in Header b and Header b in Header a.// mainwindow Header file #include "ui_MainWindow.h" #include <QApplication> //some Header here //try #include "Konfiguration.h" //-- not work because in Konfiguration.h i already include mainwindow.h in oder to use for the Slot etc using namespace std; class MainWindow : public QMainWindow { Q_OBJECT private: Ui::MainWindow widget; QApplication *app; // Try Konfiguration *confi; public: MainWindow(QApplication*); //some function signals: public slots: // function etc ........ void openConfi(); }; // in mainwindow.cpp // Open Game Configuration QObject::connect(widget.SpielKonfiguration,SIGNAL(triggered()),this,SLOT(openConfi())); // End Game QObject::connect(widget.SpielBeenden,SIGNAL(triggered()),app,SLOT(quit())); // Configuration Window void MainWindow::openConfi(){ // in this Slot , the configuration window should open confi->show(); }
Konfiguration.h and cpp
#ifndef KONFIGURATION_H #define KONFIGURATION_H #include <QApplication> #include "MainWindow.h" // some Header here.... class Konfiguration : public QDialog{ Q_OBJECT private: QApplication *app; // here i create mainwindow pointer to Setup the gamefield MainWindow *spielFenster; //some code here public: Konfiguration(QApplication*, MainWindow*); virtual ~Konfiguration(); public slots: void clearText(); // void updateTextN(QString); // void updateTextM(QString); }; //konfiguration.cpp // use the mainwindow pointer to set Slot //Set N, M in VerschiebeSpiel QObject::connect(editN,SIGNAL(textChanged(QString)),spielFenster,SLOT(setN(QString))); QObject::connect(editM,SIGNAL(textChanged(QString)),spielFenster,SLOT(setM(QString)));
So how can I open the Konfiguration Window via the Menu bar of Mainwindow but I can still use the Konfiguration to configure the MainWindow ?
Muss be simple for you guys, but quite hard for newbie :)
thx for your help
the circular includes problem can often be solved with a forward of the class
so instead of ( in the other class header)
#include <myclass>you just
doclass MyClass; // this is a forward
and you are allowed to have
class Other {
MyClass * mc;Since all the use of the Myclass functions, are in the CPP file, it works.
In the CPP file you then include the actual header.
Not sure i explained it good :(
Please see
http://stackoverflow.com/questions/625799/resolve-header-include-circular-dependencies -
the circular includes problem can often be solved with a forward of the class
so instead of ( in the other class header)
#include <myclass>you just
doclass MyClass; // this is a forward
and you are allowed to have
class Other {
MyClass * mc;Since all the use of the Myclass functions, are in the CPP file, it works.
In the CPP file you then include the actual header.
Not sure i explained it good :(
Please see
http://stackoverflow.com/questions/625799/resolve-header-include-circular-dependencies@mrjj
thx for the quick answer.Now I got build successfull but when I start the Programm and klick on menubar set configuration
I got Windows disconnection and have to quithere is what i Changed
/////////////////////////////// // in mainwindow.h // mainclass mainwindow #include <QMenuBar> #include <QAction> class Konfiguration; // this is the other class using namespace std; class MainWindow : public QMainWindow { Q_OBJECT private: Konfiguration *confi; //code } ////////////////////////// //mainwindow.cpp #include "mainwindow.h" #include "Konfiguration.h" // Configuration Window void MainWindow::openConfi(){ // // try to add something like confi = new Konfiguration(&app,this) like in the main() is not working either. // confi->show(); // Debugger stoppt at show() } // in Konfiguration.h #include "MainWindow.h" class Konfiguration : public QDialog{ Q_OBJECT private: code }
-
@mrjj
thx for the quick answer.Now I got build successfull but when I start the Programm and klick on menubar set configuration
I got Windows disconnection and have to quithere is what i Changed
/////////////////////////////// // in mainwindow.h // mainclass mainwindow #include <QMenuBar> #include <QAction> class Konfiguration; // this is the other class using namespace std; class MainWindow : public QMainWindow { Q_OBJECT private: Konfiguration *confi; //code } ////////////////////////// //mainwindow.cpp #include "mainwindow.h" #include "Konfiguration.h" // Configuration Window void MainWindow::openConfi(){ // // try to add something like confi = new Konfiguration(&app,this) like in the main() is not working either. // confi->show(); // Debugger stoppt at show() } // in Konfiguration.h #include "MainWindow.h" class Konfiguration : public QDialog{ Q_OBJECT private: code }
@Yrandom said in Set Delay Timer:
Konfiguration *confi;
Did you remeber to new it ?
Konfiguration *confi; is just a pointer :)
you MUST do
confi = new Konfiguration()before using it for anything
-
@Yrandom said in Set Delay Timer:
Konfiguration *confi;
Did you remeber to new it ?
Konfiguration *confi; is just a pointer :)
you MUST do
confi = new Konfiguration()before using it for anything
:D my bad
i did that but i pas the function by referencevoid MainWindow::openConfi(){ // //try to add something like confi = new Konfiguration(&app,this) like in the main() is not working either. // pass by reference mistake :D confi->show(); // Debugger stoppt at show() } // // IT work now. :D //
-
I wonder if this could be achieved using Property Animation instead of using timers and stylesheet manipulation.