online style ändern

Alles rund um die Programmierung mit Qt
Antworten
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

online style ändern

Beitrag von michaelschmid »

Hallo zusammen

Ich bin defintiv noch newbie und bin vieles und einiges am ausprobieren, so bin ich irgendwann auf die Styles gestossen und ich habe keine probleme damit, den Style vor der Kompilierung zu ändern. Entsprechend wird das GUI dann im entsprechenden Style geöffnet. Wie aber geht dies bei aktivem Programm?
Das ganze würde ich gerne von einer combobox aufrufen.. aber ich finde nicht heraus, wieso die combobox nicht ausgewertet wird...:
QT4.1.0
Win2000
mingW
hier teile des Codes..

1. Teil ==================================

Code: Alles auswählen

QLabel *styleLabel = new QLabel(tr("GUI Style:"));
QComboBox *styleCombo = new QComboBox;
    styleCombo->addItem(tr("Windows Style"));
    styleCombo->addItem(tr("Windows XP-Style"));
    styleCombo->addItem(tr("Mac Style"));
    styleCombo->addItem(tr("Plastique Style"));
    
    connect(styleCombo, SIGNAL(activated(int)), this, SLOT(guiStyleChange(int)));
ENDE 1. Teil=================================

2. Teil ===================================

Code: Alles auswählen

void GeneralPage::guiStyleChange(int styleIndex)
{
	// get actual style !
	
	qApp->setStyle(new QPlastiqueStyle);
}
ENDE 2. Teil =================================

klar ist, dass im zweiten Teil sicherlich noch nicht der gewählte style kommt, unklar ist, wieso gar nichts kommt !! :-(

Der erste Teil ist dem Beispiel über den Config-Dialog entnommen und leicht angepasst...

wäre toll, wenn mir dies jemand erklären könnte ..
besten Dank im voraus..
Michael
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

In qt-4-src/xamples/widgets/styles ist ein Beispielprogramm dazu welches funktioniert. Ich würde sagen dein setStyle-Aufruf ist falsch

Code: Alles auswählen

QApplication::setStyle(QStyleFactory::create(styleName));
bzw.
qApp->setStyle(QStyleFactory::create(styleName));
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

es geht noch immer nicht

Beitrag von michaelschmid »

hallo christian81

besten dank für deine Hilfe... daran liegt es eindeutig nicht.. es geht immer noch nicht..!
wobei ich langsam davon ausgehen, dass meine connection nicht funktioniert...

Grundlegend gehe ich wie folgt vor:

Zuerst wird die Main-Applikation gestartet, dies funktioniert tadellos (wenigstens dass :-) )
Danach kann ich unter Files/Preferences den Configure-Dialog aufrufen, siehe Beispiel example:dialogs:configuration dialog...
diesen habe ich leicht angepasst, .. dort wo bisher die Trolltech-Einträge sind, stehen bei mir die zur verfügung sthenden styles .. (das habe ich jetzt gelernt, automatische detektierung der vorhandenen styles ..)
so.. bis hier funktioniert also alles... nur die Styles, die ändert es nicht...
ich kann im debug-modus auch nicht im konstruktor der entsprechenden page stehen bleiben..., jedoch im konstruktor des configure dialogs... das erstaunt mich etwas...

wüsstest du hier noch weiter?

Grüsschen
michael
Michael
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

noch was gefunden

Beitrag von michaelschmid »

nochmals ich...

ich habe da noch was gefunden...
es wird von der entsprechenden source-datei keine moc-datei erstellt, somit lässt sich die connection nicht finden, oder?
Soweit sollte ich QT verstanden haben...

Rat ist gefragt... danke schon im voraus..!
Michael
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Hmmm [Glaskugel raushol] hmmm, noch gefroren [polier, polier] hmmm, immer noch nichts zu sehen. Hättest Du mal ein Stückchen Code oder gezipt gleich das ganze Projekt?
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

Klar, mache ich doch gerne

Beitrag von michaelschmid »

Also, im Anhang ist das Projekt, zumindest Teil davon, dass ganze wäre aufgrund der Doku ziemlich gross... ich weiss nicht, ob du es so kompilieren kannst, aber eigentlich spricht nichts dagegen...
der AssistantClient wird ebenfalls noch miteingebunden...!

danach unter File:Preferences den dialog öffnen...
und dort liegt dann auch das problem.. ich habe noch einiges umgebaut gestern.. aber es geht immer noch nicht...!
Meiner Meinung nach, liegt es an der connection in pages.cpp ...!
Q_Object kann ich dort nicht einbinden.. darum habe ich auch einige membership-functions in configdialog.cpp untergebracht...!

besten dank für deinen aufwand..
Dateianhänge
ode.zip
(17.37 KiB) 166-mal heruntergeladen
Michael
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Klar, mache ich doch gerne

Beitrag von macman »

michaelschmid hat geschrieben:ich weiss nicht, ob du es so kompilieren kannst, aber eigentlich spricht nichts dagegen...
Ging natürlich nicht, war aber schnell zu beheben.
michaelschmid hat geschrieben:Meiner Meinung nach, liegt es an der connection in pages.cpp ...!
Da liegst Du richtig, der Debugger sagt eigentlich alles.

Code: Alles auswählen

    connect(styleCombo, SIGNAL(currentItemChanged(const QString &)),
    		 this, SLOT(changeStyle(const QString &)));
Das Signal currentItemChanged() gibt es nicht bei Comboboxen, es heißt currentIndexChanged(). Dann wurde der Slot nicht gefunden, weil es ihn in der Klasse nicht gibt. Gesucht, gefunden, ist im ConfigDialog. Da deine GeneralPage-Klasse vom ConfigDialog aufgerufen wird, habe ich das this durch ein parentWidget() ersetzt, denn Du willst ja das Signal an einen andere Klasse senden. Danach ging es immer noch nicht, da parentWidget() NULL zurück liefert. Im ConfigDialog sieht man auch den Grund dafür:

Code: Alles auswählen

    pagesWidget->addWidget(new GeneralPage);
Hier gehört ein (this) hinter das GeneralPage, damit die Klasse weiß zu wem sie gehört, und schon meckert der Debugger nicht mehr bei der Connect-Zeile. In Folge dessen funktioniert es jetzt auch.
michaelschmid hat geschrieben:besten dank für deinen aufwand..
5 Minuten, wenn man weiß wie man Debuggermeldungen auswertet :-D
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hmm, wenn ich die Anwendung starte kommen gleich mehrere Fehlmeldungen:

Code: Alles auswählen

Object::connect: Parentheses expected, slot MainWindow::
Object::connect: Parentheses expected, slot MainWindow::
Object::connect: No such slot MainWindow::append(QString)
Object::connect: No such signal QComboBox::currentItemChanged(QString)
Noch Fragen?
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

BESTEN DANK

Beitrag von michaelschmid »

das ging aber schnell .. :-)

frage, mit welchem debugger arbeitest du denn? ebenfalls mit MingW, oder?
Ich versuche das ganze zur Zeit noch auf Windows.. mit Eclipse.. ist wohl etwas viel neues aufs mal..

aber was die interpretierbarkeit der debugger-meldungen angeht, hast du wohl auch recht...

Muss das ganze mit deinen Begründungen wohl noch etwas durchdenken, um
es auch wirklich zu verstehen...

Besten und vielen Dank für deine Hilfe

Michael
Michael
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Debugger? MingW? (Was ist eigentlich MingW? Ich lese es öfters im zusammenhang mit Windows, kenne es aber nicht...) Eclipse?

Dein Programmächen habe ich auf die schnelle auf der Konsole getestet und mit vi überflogen... Ansonsten verwende ich KDevelop oder Kate/KWrite...
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: BESTEN DANK

Beitrag von macman »

michaelschmid hat geschrieben:frage, mit welchem debugger arbeitest du denn? ebenfalls mit MingW, oder?
Visual Studio 7 und der passenden Trolltech Integration. Irgendwo muß ja der Vorteil gegenüber der freien Version sein :D
michaelschmid hat geschrieben:Muss das ganze mit deinen Begründungen wohl noch etwas durchdenken, um es auch wirklich zu verstehen...
Wenn noch Fragen sind, kannst Du sie immer noch stellen. Wir laufen nicht weg.
michaelschmid
Beiträge: 9
Registriert: 12. Februar 2006 19:57

Beitrag von michaelschmid »

MingW ist eine windows-portierung von gcc ... aber es ist nicht dasselbe wie Cygwin...
der gdb gibts auch für MingW ... QT unterstützt in der freien Version auf windows leider nur MingW .. daher kommt das..
Eclipse ist eine auf Java basierte Entwicklungsumgebung. Für Eclipse wurden viele sogenannte plug-ins geschrieben, die Eclipse um weitere sprachen ergänzen, so auch für C++ (das plug-in dafür, CDT, stammt zum Teil von IBM)...
Ich benütze also Eclipse auf Windows... und QT auf windows.. allerdings soll das progrämmchen dann mal auch auf linux laufen... dazu musste ich ees allerdings erst wieder installieren...!
und nun noch QT kompilieren...

gruss
Michael
Michael
Antworten