Seite 1 von 1

online style ändern

Verfasst: 13. März 2006 23:07
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..

Verfasst: 14. März 2006 10:34
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));

es geht noch immer nicht

Verfasst: 14. März 2006 20:52
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

noch was gefunden

Verfasst: 14. März 2006 21:19
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..!

Verfasst: 15. März 2006 07:27
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?

Klar, mache ich doch gerne

Verfasst: 15. März 2006 11:11
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..

Re: Klar, mache ich doch gerne

Verfasst: 15. März 2006 12:52
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

Verfasst: 15. März 2006 12:59
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?

BESTEN DANK

Verfasst: 15. März 2006 22:19
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

Verfasst: 15. März 2006 23:09
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...

Re: BESTEN DANK

Verfasst: 16. März 2006 07:13
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.

Verfasst: 16. März 2006 14:25
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