textlabel

Verschiedenes zu Qt
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

textlabel

Beitrag von speed04 »

hallo,

ich habe ein textlabel und möchte davon die schriftgröße ändern, indem ich auf einen button klicke.

mir fehlt dafür die passende funktion. hat jemand ein stichwort oder ne anregung für mich?

ich hatte schon in eine funktion folgendes geschrieben:

Code: Alles auswählen

void aendern
{
setFont(QFont("Times", groesse));
repaint();
}
und mein connect befehl:

Code: Alles auswählen

connect (BUTTON2, SIGNAL(clicked()), LABEL, SLOT(aendern()));
der code wird übersetzt und wenn ich es dann teste, passiert also rein gar nix.

für tipps und anregungen bin ich dankbar!
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Re: textlabel

Beitrag von gerome69 »

[quote="speed04"]

Code: Alles auswählen

connect (BUTTON2, SIGNAL(clicked()), LABEL, SLOT(aendern()));
BUTTON2 ist sicher keine Konstante?! Also bitte in Kleinbuchstaben, weil sicher eine Instanz von QPushButton oder ähnlichem ist?!

Wie sieht denn die Klassendefinition aus? Hast du Q_OBJECT mit drin, damit der moc die Klasse parst?

Gruß, Gérôme
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

okay die klassendefinition sieht so aus:

Code: Alles auswählen

class Sido: public QDialog, public Ui_SIDO
{
	Q_OBJECT
			public: Sido (QWidget *parent = 0);	//Koonstruktor
				   ~Sido();				//Destruktor
			private slots: 	
					void druecken();
					void farbe();
};
das ist der objektname zu einem button. ich persönlich finde das für mich übersichtlicher, wenn ich es komplett groß schreibe. aber es kann schon sein, dass das später mal probleme geben wird.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Warum ist bei

Code: Alles auswählen

void aendern()
keine Klasse angegeben? Es gibt bei dir auch keinen Slot aendern(). Auf der Konsole gibt es eine Meldung wenn der Slot nicht 'connected' werden kann, ansonsten hat auch connect einen Rückgabewert.
Auch ein Breakpoint im Debugger könnte anzeigen, ob die Funktion überhaupt ausgeführt wird.
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

okay, sorry es liegt ein fehler vor. da ich ja zwischendurch selbst nochmal probiert habe, habe ich was mit der funktionsbezeichnung durcheinander gebracht. ich poste mal meine 3 files die ich habe:
(bitte nehmt die dateibezeichnung nicht so ernst)!!!

wie gesagt, es kommen keine fehlermeldungen beim compilieren.

warum ich dort keine klasse angebe, da ich die ja doch vorher schon festgelegt habe, bzw. bei meiner anderen funktion auch nicht in die funktion mit rein schreibe.

code entfernt, da dieser nun downloadbar ist!
Zuletzt geändert von speed04 am 14. November 2008 17:34, insgesamt 3-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Überprüfe endlich ob die connect() auch funktionieren!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

mh, ich kann einfach nicht debuggen. wahrscheinlich sind meine einstellungen im eclipse zum debugger falsch. ist der gdb standardmäßig bei mingw dabei oder muss man den extra installieren?
wie debugged ihr denn?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Deine Shift-Taste ist auch defekt, vielleicht kannst du deswegen deinen Debugger nicht konfigurieren?

Außerdem gibt es noch andere Möglichkeiten um zu überprüfen ob ein connect erfolgreich war. Wurden auch alle in diesem Thread wiedermal genannt.
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

der connect befehl funktioniert. ich habe mal den empfänger auf "this" geändert. nun kann ich sozusagen die schriftgröße bei den buttons ändern. sobald ich als empfänger im connect befehl wieder mein textlabel anspreche ändert er das nicht. woran könnte das liegen?

meine shifttasten sind defekt, deswegen tippe ich alles klein und kann auch nicht debuggen.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

ich habe mal den empfänger auf "this" geändert.
ich bin verwirrt.. der war doch schon in "connect (BUTTON, SIGNAL(clicked()), this, SLOT(druecken()));" drin?
sobald ich als empfänger im connect befehl wieder mein textlabel anspreche ändert er das nicht. woran könnte das liegen?
Falls du damit "connect (BUTTON2, SIGNAL(clicked()), LABEL, SLOT(aendern()));" meinst (da wird nichts "angesprochen", sondern eher "registriert") und LABEL ein QLabel* ist, habe ich die Gegenfrage: Wo genau in der Klasse QLabel (http://doc.trolltech.com/4.3/qlabel.html) hat es einen Slot "aendern()"? Ich sehe keinen.....
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

mh, nun habe ich es mit stylesheets hinbekommen, dass er mir die hintergrundfarbe und auch die textfarbe ändert. aber an der schriftgröße hänge ich noch immer.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

speed04 hat geschrieben:mh, nun habe ich es mit stylesheets hinbekommen, dass er mir die hintergrundfarbe und auch die textfarbe ändert. aber an der schriftgröße hänge ich noch immer.
ist dein label eine eigene klasse (natuerlich abgeleitet von QLabel oder aehnlichem), oder einfach nur ein QLabel*?

in zweiterem fall muesstest du in deiner eigenen klasse, bspw. dem dialog, einen slot zum aendern der schriftgroesse d. labels haben und das clicked-signal von deinem button damit verbinden.

mfg,
julian
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

ich habe einfach nur ein QLabel, mein widget habe ich mit dem Qt designer erstellt. hier mal der code, wo die funktion für die schriftgröße drin ist.

Code: Alles auswählen

#include <QtGui>
#include "sido.h"

Sido::Sido(QWidget *parent)
: QDialog (parent)
{
	setupUi (this);
	connect (button, SIGNAL(clicked()), this, SLOT(druecken()));
	connect (SLIDER, SIGNAL(valueChanged(int)), LCD, SLOT(display(int)));
	connect (button2, SIGNAL(clicked()), this, SLOT(groesse()));
}

Sido::~Sido()
{}

void Sido::druecken()
{
	close();
}

void Sido::groesse()
{
	textlabel -> setStyleSheet("QLabel{background-color: yellow; color: red}");
	QFont font;
	font.setFamily(QString::fromUtf8("Arial"));
	font.setPointSize(25);
	textlabel -> setFont(font);
	repaint();
}
mh...
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

Persönlich muss ich sagen das ich mich in deinem Post nicht mehr auskenne da du immer nur einen Teil des Codes veröffentlichst – und eine Problem beschreibst das in zumindest zwei Dateien aus zu programmieren ist (signal/slot)!
Es ist gut das du jetzt die „*.c“ Datei abgebildet hast aber wie sieht die dazugehörige „*.h“ Datei aus???

Da ich auch nicht wies mit welchen Eigenschaften du das „QLabel“ konfiguriert hast ist der folgende Vorschlag etwas geraten.
Setze folgende Eigenschaften für dein „textLabel“

Code: Alles auswählen

	textlabel->setTextFormat(Qt::RichText);
Damit dürftest du fürs erste alle Änderungen in der Schriftart zulassen!

Du könntest natürlich auch mal ein Code-Cleaning durchführen das Projekt zip'en und es hier herein stellen damit man die Möglichkeit bekommt deine Arbeitsschritte nachzuvollziehen!
speed04
Beiträge: 39
Registriert: 7. November 2008 15:24

Beitrag von speed04 »

ich habe mal das projekt gepackt und hier kann man es laden http://rapidshare.com/files/163743877/box.rar.html.
da könnte ja eventuell mal jemand gucken. ich würde gerne halt auf den button "text ändern" klicken wollen und dann soll sich eben die schriftgröße/typ ändern. schriftfarbe verändern funktioniert ja super und auch vom qlabel der background-color lässt sich problemlos wechseln.

danke für eure hilfe!!!!
Antworten