[gelöst] QCheckbox: Textlänge

Alles rund um die Programmierung mit Qt
Antworten
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

[gelöst] QCheckbox: Textlänge

Beitrag 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.
Zuletzt geändert von Nukleus am 1. Oktober 2015 10:33, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QCheckbox: Textlänge

Beitrag 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).
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

Re: QCheckbox: Textlänge

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QCheckbox: Textlänge

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

Re: QCheckbox: Textlänge

Beitrag 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.
Antworten