(gelöst) Qt 4.5: Messagebox prüfen, ob bereits dargestellt

Alles rund um die Programmierung mit Qt
Antworten
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

(gelöst) Qt 4.5: Messagebox prüfen, ob bereits dargestellt

Beitrag von Ritchie »

Hallo Zusammen,

in meinem Programm schickt ein Hintergrund Thread eine Signal an die Hauptform, wenn er Probleme hat. Die Anzeige erfolgt über eine simple Messagebox für alle Hintergrund Threads gleich (sind mehrere) mit unterschiedlichen Meldungen.

Code: Alles auswählen

// **************************************************************************
// Show Message Box from thread
// **************************************************************************
void MainWindow::showMessageFromThread(QString		sTitel,QString		sMessage,QString		sInfo,	int	MessageType)
{
QMessageBox		msgBox;

	msgBox.setWindowTitle (sTitel);
	msgBox.setText(sMessage);
//	msgBox.setIconPixmap(QPixmap(ApplicationPath + m_FileName) );
	msgBox.setInformativeText(sInfo);
	msgBox.setStandardButtons(QMessageBox::Ok);
	msgBox.setDefaultButton(QMessageBox::Ok);
	msgBox.setIcon( (QMessageBox::Icon) MessageType );
	msgBox.exec();
}	
Das ganze führt aber zu einer Menge Messageboxen, wenn der Bediener sie nicht bestätigt. Diese Meldungen sind aber so wichtig, das ich bei bestehendem Problem sicherstellen muss, das wenigstens eine Meldung dieses Fehlers bereits angezeigt wird.

Wie kann ich also feststellen, ob diese Meldung noch als Messagebox angezeigt wird. Das ganze sieht übrigens wie folgt aus

Gruss Ritchie
Dateianhänge
errormessages.jpeg
errormessages.jpeg (12.19 KiB) 3219 mal betrachtet
Zuletzt geändert von Ritchie am 29. August 2010 16:29, insgesamt 2-mal geändert.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

fuer einfach ne globale variable ein.
bool schonDa und setz die beim ersten mal checked.
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Hi,

nun ja, für jeden Thread und für jede Art von Meldung.

Es können auch zwei ungleiche Meldungen von einem Thread angezeigt werden. Beide müssten angezeigt werden. Daher würde ich min. den Titeltext ermitteln, wenns geht.

Gruss R.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

machs doch nicht komplizierter als es ist.
dann erstell halt ne QList<QString> und frag, ob der Titel schon da ist.
Wenn du der MessageBox noch ein "this" als parent mitgibst, kannst du ueber children() es bekommen, falls nicht kannst dus ueber QApplication -> allWidgets versuchen.
Man kann sich das leben auch schwer machen :o
Ritchie
Beiträge: 86
Registriert: 29. Januar 2007 19:41

Beitrag von Ritchie »

Hi,

hier die Lösung

Code: Alles auswählen


	if( sOpenMessageBoxes.contains( sMessage) > 0 )										// is message show up to now
		return;
		
	sOpenMessageBoxes.append(sMessage);															// remember Message 

	msgBox.setWindowTitle (sTitel);
	msgBox.setText(sMessage);
	msgBox.setInformativeText(sInfo);
	msgBox.setStandardButtons(QMessageBox::Ok);
	msgBox.setDefaultButton(QMessageBox::Ok);
	msgBox.setIcon( (QMessageBox::Icon) MessageType );
	msgBox.exec();																												// SHow the message

  for (int i = 0; i < sOpenMessageBoxes.size(); ++i)
		{
		if( sOpenMessageBoxes.at(i) == sMessage )												// find last message
			sOpenMessageBoxes.removeAt(i);																	// and remove the message, because acknowledged
		}
Gruss R.
Antworten