ich beschäftige mich seit neuestem mit C++ und QT.
Trotz C++ Fachbuch und Online-Tutorials von QT, habe ich da anscheinend noch Verständnisprobleme.
Ich habe hier erstmal ein einfaches QWidget - Programm erstellt um mein Problem vereinfacht darzustellen.
Das Programm beinhaltet:
ein Label (ui->label),
einen PushButton (pushButton)
Nachdem ich auf den Pushbutton gedrückt habe, würde ich gerne das Label ändern.
Und ja ich weiß, dass man das ganz simpel lösen kann indem man
"ui->label->setText("ABC");
schreiben kann. Ich will aber aus Verständnisgründen es hier in diesem Beispiel mit QObject::connect(...) lösen.
Also erst wird beim pushButton Drücken die Funktion "Klasse::function();" ausgelöst, von dort wird die 2te "Klasse2::function2();" ausgelöst.
In beiden Funktionen wird ein Signal gesendet, das den Labeltext ändern soll.
In "Klasse:function()" funktioniert es, das Label ändert sich zu "Hallo"
Aber sobald aus der Funktion eine weitere Funktion einer anderen Klasse aufgerufen wird, wird zwar richtig die Funktion "MainWindow::changeText()" ausgeführt, aber das Label wird nicht geändert.
Wodran liegt das?
mainwindow.h
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void changeText(QString);
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
class Klasse : public QObject
{
Q_OBJECT
public:
void funktion();
signals:
void go(QString);
};
class Klasse2 : public QObject
{
Q_OBJECT
public:
void funktion2();
signals:
void go2(QString);
};
#endif // MAINWINDOW_H
Code: Alles auswählen
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeText(QString text)
{
ui->label->setText(text);
qDebug() << "ChangeText ausgeführt" << text;
}
void Klasse2::funktion2()
{
Klasse2 kl2;
MainWindow mw;
QObject::connect(this, SIGNAL(go2(QString)), &mw, SLOT(changeText(QString)));
emit go2("Hallo");
qDebug() << "Funktion2() ausgeführt";
}
void Klasse::funktion()
{
Klasse2 kl2;
kl2.funktion2();
emit go("Hallo1");
qDebug() << "Funktion1() ausgeführt";
}
void MainWindow::on_pushButton_clicked()
{
Klasse kl;
Klasse2 kl2;
QObject::connect(&kl, SIGNAL(go(QString)), this, SLOT(changeText(QString)));
kl.funktion();
}