Zeilenumbruch in Msg-Box unterdrücken

Alles rund um die Programmierung mit Qt
Antworten
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Zeilenumbruch in Msg-Box unterdrücken

Beitrag von TK »

Hallo zusammen!

Altes Thema, poppt aber immer wieder gerne auf. Habe den unten stehenden Code:

Code: Alles auswählen

                msg.setIcon(QMessageBox::Critical);
                msg.setText(QObject::tr("Syntaxfehler Dateiname!"));
                msg.setInformativeText("Beispiel-Dateiname der Firmware: Test.bin/axf");
                msg.setWindowFlags(Qt::SubWindow);
                msg.exec();
Mit \r\n kann ich ja einen Zeilenumbruch erzwingen, ist aber im setInformativeText nicht vorhanden. Warum kommt trotzdem ein Zeilenumbruch (siehe Bild) und wie kann ich diesen Unterdrücken?

Bild:
Dateianhänge
test.JPG
test.JPG (6.03 KiB) 3166 mal betrachtet
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Die Anzeige geschieht recht sicher durch ein QLabel. Da die Größe der Box nicht den Inhalt abschneiden soll, ist dort wordWrap auf true gestellt.
Du hast also keine Chance, den Wrap abzustellen. Außer du gehst mit FontMetrics und anderen Hacks der Geometry der MessageBox an die Wäsche. Ich würds lassen.

BTW: QLabel kann RichText, für Zeilenumbrüche nimm deshalb ein "<br>".
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Beitrag von TK »

setInformativeText nimmt nur QString.
void setInformativeText ( const QString & text )

Wie soll ich das <br> einbringen? So?

Code: Alles auswählen

                msg.setIcon(QMessageBox::Critical);
                msg.setText(tr("Syntaxfehler Dateiname!"));
                msg.setInformativeText(tr("Beispiel-Dateiname der Firmware:<br>"
                                                       "Test.bin/axf:"));
                msg.setWindowFlags(Qt::SubWindow);
                msg.exec();
Das Ergebnis ist aber auch nicht schön anzusehen (siehe Bild, Zeilenumbruch nach "der")

Bild:
Dateianhänge
test.JPG
test.JPG (6.25 KiB) 3154 mal betrachtet
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

TK hat geschrieben:setInformativeText nimmt nur QString.
void setInformativeText ( const QString & text )

Wie soll ich das <br> einbringen? So?
Das mit dem <br> stand unter "BTW", was mit dem eigentlichen Problem nichts mehr zu tun hatte. Ich hab das nur erwähnt, dass du für ein QLabel (oder auch QTextEdit usw) nicht auf plattformspezifische newlines setzen sollst, wenn RichText geht!

Ich würde es lassen, den Newline selber hinzubiegen (also über ein msgBox->resize(); bis es bei dir passt). Anderes DE, anderer Style, ein paar Hacks im Style (siehe Bespin "MessageBox-Hack"), anderer Font und deine MsgBox schaut wieder nach Müll aus.
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Beitrag von TK »

Okay. Vielleicht ersetze ich später mal die Msg.Box durch einen Dialog. Danke für die Diskussion.
Antworten