Seite 1 von 1
[gelöst] QCheckbox: Textlänge
Verfasst: 26. März 2015 12:11
von Nukleus
Hallo,
ich habe ein kleineres Problem bei der Darstellung der Beschriftung einer Checkbox. Der zugehörige Code sieht folgendermaßen aus:
Code: Alles auswählen
checkbox.setText(tr(textCodec->toUnicode(QByteArray("Dies ist der darzustellende Text"))));
Wenn nun der darzustellende Text der Checkbox grösser wird als (ca.) 30 Zeichen, dann bekommt die Checkbox gar keinen Text. Ich bin mir natürlich nicht ganz sicher, welche der verwendeten Routinen die Einschränkung darstellt. Ich konnte den Verursacher nur wenig eingrenzen. Weglassen des Aufrufs von tr() hat z.B. am Verhalten nichts geändert.
Hat jemand eine Idee, woran das Problem liegen könnte? Im Programm habe ich z.B. Fehlermeldungen, die (dann über QLabel) wesentlich längere Texte enthalten als 30 Zeichen und die ich auch durch die Mühle "tr(textCodec->toUnicode(QByteArray(" drehe und die bei der Darstellung keinerlei Probleme machen.
Ich habe den dazustellenden Text fürs erste eingekürzt, d.h. ein akutes Problem ist dies hier jetzt nicht. Ich würde aber trotzdem gerne wissen, woran es hakt, damit ich die Einschränkung ggf. abstellen kann.
Re: QCheckbox: Textlänge
Verfasst: 26. März 2015 18:01
von Christian81
Ich schätze das liegt am Layout - wenn die Größe der QCheckBox kleiner ist als die Größe welcher der anzuzeigende Text benötigt wird vielleicht gar kein Text dargestellt. Hat die QCheckBox eine maximumWidth?
Abgesehen davon - was soll das mit textCodec? Du konvertierst einen ASCII-String in ein QByteArray, konvertierst dies mit einen Codec zu einem QString nur um es dann an tr() zu übergeben welches ein const char* als Input benötigt, d.h. QString wird implizit in ein const char* konvertiert (und der resultierende const char* - String ist m.E. noch als ASCII kodiert).
Re: QCheckbox: Textlänge
Verfasst: 16. April 2015 11:39
von Nukleus
Nein, die Checkbox hat keine maximale Länge, und nein, das Verhalten liegt nicht am Layout.
Auch dann, wenn ich eine checkable Action (z.B. in einem Menue) mit (zu langen) Text darstelle, dann wird ebenfalls gar nichts mehr dargestellt. Das Verhalten tritt auf, sobald ich QT3_SUPPORT nicht mehr definiere.
Die Mimik "tr(textcodec->toUnicode(QByteArray(" brauche ich, wenn ich z.B. das Zeichen "€" sauber darstellen und mein Programm übersetzungsfähig gestalten will. Damit funktioniert beides zuverlässig und ich habe leider dafür keine andere (und einfachere) allgemeingültige Lösung gefunden. Wenn Du mir aber eine einfachere Lösung dafür hast, probiere ich sie gerne aus.
Mit der zulässigen Textlänge einer Checkbox hat dies aber nichts zu tun.
Re: QCheckbox: Textlänge
Verfasst: 16. April 2015 18:19
von Christian81
Dann bitte ein minimales, kompilierbares Beispiel.
Der Quatsch/Hack mit dem QByteArray umgeht man, indem man entweder überall UTF-8 benutzt (was aber unter Windows schwierig ist) oder eben keine non-ASCII-Zeichen im Code verwendet und den Rest mit der Übersetzung erledigt.
Re: QCheckbox: Textlänge
Verfasst: 1. Oktober 2015 10:32
von Nukleus
Problem "gelöst":
Ich verwende die Checkbox hauptsächlich (d.h. fast ausschließlich) in einem Untermenu-Eintrag eines Eintrags in einer Menu-Bar. Beispiel siehe unten.
Code: Alles auswählen
setMenu = new QMenu(textCodec->toUnicode(tr( "&Einstellungen ")),&menuBar); /* das zugehörige Menu */
toggleDisplayHiddenShares = new QAction(tr(textCodec->toUnicode( QByteArray("ausgeblendetes Wertpapier anzeigen"))),&menuBar); /* Aktion zu Anwahl Einstellungen */
toggleSpecialMarkedShares = new QAction(tr(textCodec->toUnicode(QByteArray("speziell markiertes Wertpapier anzeigen"))),&menuBar); /* Aktion zu Anwahl Markierung */
toggleDisplayHiddenShares->setCheckable(TRUE); /* Aktion ist checkable */
styleSheetAction = new QAction(textCodec->toUnicode(tr( QByteArray("Anzeige / Bearbeiten Stylesheet"))),&menuBar); /* Aktion zu Anwahl Einstellungen */
setMenu->addAction(toggleSpecialMarkedShares); /* die Action rein in das Menu */
setMenu->addSeparator(); /* und einen Separator rein */
setMenu->addAction(styleSheetAction); /* die Action rein in das Menu */
Je nachdem, wie lange der Text des setMenu ist (Hier: "&Einstellungen ") wird der Text zur Checkbox toggleSpecialMarkedShares angezeigt oder nicht. Im Beispiel mußte ich an den Text "Einstellungen" 2 Blanks anhängen, damit der Text der Checkbox auch angezeigt wird.
Es lag also doch am Layout.