Ich bin neu zu Qt und ich versuche, eine Schleife zu laufen, die ein QWidget mit QPainter aktualisiert. Kurz gesagt, ich versuche eine Endlosschleife zu erstellen, die ein QWidget mit einem Klick aktualisiert (zB Spiel starten). Dann möchte ich die Schleife beim Klicken auf eine andere Taste stoppen (sagen wir Ende Spiel). Ich würde auch gerne etwas über einen besseren Ansatz hören, um diese Funktionalität zu erhalten.eine Schleife in Qt auf Knopf klicken klickt
In meiner MainWindow-Klasse möchte ich einen Thread starten, der das Objekt einer Klasse Spiel enthält. Eine Endlosschleife beginnt, wenn die Methode game-> start_game() aufgerufen wird. Ich möchte die Schleife bei einem Klick starten. Dann sollte die Schleife beim Klicken auf eine andere Schaltfläche "Ende" verlassen werden.
//main_wid is the central widget of my MainWindow
QPushButton* btn_start = new QPushButton("start", main_wid);
QPushButton* btn_end = new QPushButton("end", main_wid);
//thread, game are private variables in my MainComponent class
thread = new QThread;
game = new Game(10);
game->moveToThread(thread);
//on btn_start click, the thread start in run_thread() method
connect(btn_start, SIGNAL(clicked(bool)), this, SLOT(run_thread()));
//on thread->start(), I call start_game() slot in the Game class which runs an infinite loop
connect(thread, SIGNAL(started()), game, SLOT(start_game()));
//here i want to connect clicked(bool) of btn_end to a method in game class
//such that i can break the loop in start_game() method.
//.......??
Mein Spiel Klasse:
class Game : public QObject
{
Q_OBJECT
public:
Game(int n);
~Game();
public slots:
void start_game();
void end_game();
signals:
void finish_game();
private:
int num;
};
Definition von Spielklassenmethoden:
Game::Game(int n)
{
num = n;
}
void Game::start_game()
{
int i = 0;
while(true)
{
cout << "game loop started:" << i++ << endl;
}
//emit finish_thread();
}
void Game::end_game()
{
cout << "*************************end**************************" << endl;
emit finish_game();
}
Game::~Game()
{
}
Bitte geben Sie [MCVE] (http://stackoverflow.com/help/mcve) _in der Frage selbst_ an. – derhass
fertig! danke für die Information – CODError