Anwendung hängt bei/nach Aktualisierung eines QDockWidgets
Verfasst: 28. Oktober 2010 16:41
Hallo,
in meiner Anwendung steuere ich ein Gerät an, den Ablauf der Steuerung zeige ich in einem von QDockWidget abgeleiteten Fenster an. Dabei gibt's folgendes Problem: Ab und zu hält die Anwendung einfach an, d.h. der Ablauf der Gerätesteuerung wird nicht fortgesetzt, bis ich z.B. den Mauszeiger irgendwo über das Dock Window oder einen anderen Bereich meiner GUI bewege.
Wenn ich die Aktualisierung des Dock Windows, also die Statusanzeige meines Ablaufs, komplett aus der Anwendung entferne, dann läuft die Anwendung problemlos.
Ein Versuch war, mit einem QTimer alle Sekunde ein QWidget::update() auszuführen ... das führt dazu, dass die Anwendung zwar weniger oft, aber immer noch gelegentlich anhält.
Der Code sieht folgendermaßen aus:
Und dann in meiner Anwendung:
Hat jemand eine gute Idee, weshalb die Anwendung anhält bzw. wie ich es schaffe, dass die Anwendung durchläuft?
in meiner Anwendung steuere ich ein Gerät an, den Ablauf der Steuerung zeige ich in einem von QDockWidget abgeleiteten Fenster an. Dabei gibt's folgendes Problem: Ab und zu hält die Anwendung einfach an, d.h. der Ablauf der Gerätesteuerung wird nicht fortgesetzt, bis ich z.B. den Mauszeiger irgendwo über das Dock Window oder einen anderen Bereich meiner GUI bewege.
Wenn ich die Aktualisierung des Dock Windows, also die Statusanzeige meines Ablaufs, komplett aus der Anwendung entferne, dann läuft die Anwendung problemlos.
Ein Versuch war, mit einem QTimer alle Sekunde ein QWidget::update() auszuführen ... das führt dazu, dass die Anwendung zwar weniger oft, aber immer noch gelegentlich anhält.
Der Code sieht folgendermaßen aus:
Code: Alles auswählen
namespace Ui {
class MyDWindow;
}
class MyDWindow : public QDockWidget
{
Q_OBJECT
private:
Ui::MyDWindow* ui;
public:
MyDWindow(QWidget *parent = 0);
...
public slots:
void log(const QString&);
};
MyDWindow::MyDWindow(QWidget *parent) : QDockWidget(parent), ui(new Ui::MyDWindow)
{
ui->setupUi(this);
...
}
void MyDWindow::log(const QString& text)
{
ui->textEdit->append(text);
}
Code: Alles auswählen
MyDWindow* myDWindow;
myDWindow = new MyDWindow(this);
connect(someObject, SIGNAL(someSignal(const QString&)), this, SLOT(refreshMyDWindow(const QString&));
Anwendung::refreshMyDWindow(const QString& text)
{
myDWindow->log(text);
}