ich stehe gerade bei meinem aktuellen Projekt vor einem Problem...
Und zwar ist dem Hauptprogramm ein LoginFenster Vorgeschallten. Dieses ist soweit fast fertig. Ich möchte jetzt aber noch das der MySQL-Server Status und der FTP-Server Status unten angezeigt wird. Das hatte ich auch schon fertig (QTimer triggerte alle 3 Sekunden die neuen Status Werte). Da gab es aber ein Problem...
Das Programm blieb dann alle 3 Sekunden für nichtmal ca 0.3 Sekunden hängen aber das nevt trotzdem stark...
Jetzt habe ich nach einer anderen Lösung gesucht und bin auf QThreads in der Hilfe gestoßen.
Jetzt ist mein Problem aber das die QLabel ja dann theoretisch IN der QThread::run() verändertw erden müssen. Diese sind aber in meiner
LoginWindow Klasse (als QLabel* ....) definiert.
Jetzt wollte ich versuchen in der Klasse wo ich die run() Methode überschreibe diese als Zeiger in der Parameter Liste zu übergeben aber da bekomm ich dann später viele Fehler...
Hier mal die Wichtigen Code Ausschnitte... (ich glaube daher das ich es vorher alles in der LoginWindow Klasse geändert habe und jetzt umgeschrieben habe, hab ich jetzt die ganzen Fehler. Ich würde mich über ein paar Tipps freuen)
spaceboxdb.cpp:
Code: Alles auswählen
#include "spaceboxdb.h"
SpaceboxDB::SpaceboxDB()
{
database = new QSqlDatabase();
database->addDatabase("QMYSQL", "Spacebox-DB");
refreshServerStatusTimer = new QTimer();
refreshServerStatusTimer->setInterval(3000);
}
void SpaceboxDB::run(QLabel *spaceboxSystemStatus, QLabel *fileServerStatus)
{
refreshServerStatus(spaceboxSystemStatus, fileServerStatus, getSpaceboxSystemStatus());
}
void SpaceboxDB::startServerRefresh()
{
//refreshServerStatusTimer->start();
this->start();
}
bool SpaceboxDB::initDBC(QString host, QString user, QString pass, int port, QString db)
{
database->setHostName(host);
database->setUserName(user);
database->setPassword(pass);
database->setPort(port);
database->setDatabaseName(db);
if(database->open())
{
database->close();
return(true);
}
database->close();
return(false);
}
int SpaceboxDB::getSpaceboxSystemStatus()
{
// -------------------------------------------------
// 0 = Offline, Stoped
// 1 = Online, Started
// 2 = Wartungs Arbeiten (MaintenanceWork)
// 3 = Not Wartung (CriticalMaintenanceWork)
// 4 = Not Abschalltung (HadCriticalShutdown)
// 5 = Vorübergehend Eingestellt (TempUnavaileble)
// 6 = Unknown
// -------------------------------------------------
if(database->open())
{
QSqlQuery query(*database);
query.exec("SELECT Status FROM system WHERE system.System = 'Service'");
if(query.next())
{
if((query.value(0).toString().compare("Offline", Qt::CaseInsensitive) == 0) || (query.value(0).toString().compare("Stoped", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(0);
}
if((query.value(0).toString().compare("Online", Qt::CaseInsensitive) == 0) || (query.value(0).toString().compare("Started", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(1);
}
else if((query.value(0).toString().compare("MaintenanceWork", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(2);
}
else if((query.value(0).toString().compare("CriticalMaintenanceWork", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(3);
}
else if((query.value(0).toString().compare("HadCriticalShutdown", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(4);
}
else if((query.value(0).toString().compare("TemporaryUnavaileble", Qt::CaseInsensitive) == 0))
{
query.clear();
database->close();
return(5);
}
else
{
query.clear();
database->close();
return(6);
}
}
}
else
{
// Offline
database->close();
return(0);
}
}
void SpaceboxDB::refreshServerStatus(QLabel *spaceboxSystemStatus, QLabel *fileServerStatus, int statusValue)
{
if(statusValue == 0)
{
spaceboxSystemStatus.setText("Offline");
spaceboxSystemStatus.setStyleSheet("color: red");
}
if(statusValue == 1)
{
spaceboxSystemStatus.setText("Online");
spaceboxSystemStatus.setStyleSheet("color: green");
}
if(statusValue == 2)
{
spaceboxSystemStatus.setText("Wartung");
spaceboxSystemStatus.setStyleSheet("color: orange");
}
if(statusValue == 3)
{
spaceboxSystemStatus.setText("Notfall Wartung");
spaceboxSystemStatus.setStyleSheet("color: red");
}
if(statusValue == 4)
{
spaceboxSystemStatus.setText("Not Abgeschalltet");
spaceboxSystemStatus.setStyleSheet("color: red");
}
if(statusValue == 5)
{
spaceboxSystemStatus.setText("Nicht Verfügbar");
spaceboxSystemStatus.setStyleSheet("color: orange");
}
if(statusValue == 6)
{
spaceboxSystemStatus.setText("Unbekannt");
spaceboxSystemStatus.setStyleSheet("color: purple");
}
// File Server Status
QFtp ftpTester(this);
ftpTest.connectToHost("xyz");
ftpTest.login("abc", "defg");
if(ftpTester.state() == QFtp::Connected || QFtp::LoggedIn)
{
fileServerStatus.setText("Online");
fileServerStatus.setStyleSheet("color: green");
}
else
{
fileServerStatus.setText("Offline");
fileServerStatus.setStyleSheet("color: red");
}
}
Code: Alles auswählen
C:/Users/Tom - Henry Coursow/Documents/Qt_Projects/ToxxDream-Spacebox/spaceboxdb.cpp:113: Fehler: Abfrage des Elementes »setText« in »spaceboxSystemStatus«, das vom Nicht-Klassentyp »QLabel*« istAch keine Ahnung ich hab gestern glaube ich in der Klasse nen Blackout gehabt