Das ist ein Auszug der Klassendeklaration:
Code: Alles auswählen
class qd321go : public QMainWindow
{
Q_OBJECT
...
public:
...
pthread_t tracker_thread;
ServerTracker tracker; // tracker (eigene Klasse)
public slots:
void start_refresh();
void show_tracker();
...
signals:
void tracker_refreshed();
};
Code: Alles auswählen
void qd321go::start_refresh()
{
if ( pthread_create(&tracker_thread, NULL, ServerTracker::thread_start, this) != 0 )
{
msg_box("Error", "Thread error!"); // msg_box ist ein define
return;
}
tracker.hide(); // tracker wird versteckt
pb_refresh.setEnabled(false); // Aktualisierungsknopf disablen
}
Code: Alles auswählen
void* ServerTracker::thread_start(void* p)
{
((qd321go*)p)->tracker.refresh();
emit ((qd321go*)p)->show_tracker();
}
Ich habe extra den pthread und das Signal erstellt, damit ich genau solche Warnungen vermeiden kann.
Das Signal wurde in qd321go::setupUi() folgendermaßen connected:
Code: Alles auswählen
QObject::connect(this, SIGNAL(tracker_refreshed()), this, SLOT(show_tracker())); // show_tracker() ruft tracker.show() auf