QT4 und XCode2.2 Code Completion

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
originalhanno
Beiträge: 14
Registriert: 20. Januar 2006 10:53
Wohnort: Graz

Beitrag von originalhanno »

hier gibts auch Klassenwizards...
redDOG11_de
Beiträge: 12
Registriert: 30. Januar 2006 09:37
Wohnort: Freising
Kontaktdaten:

Beitrag von redDOG11_de »

:?: Klassenwizards :?:

...versuche erst nochmal 4.1.0 zu kompilieren. Da werden wohl andere XCode Projekte erzeugt! :lol:
originalhanno
Beiträge: 14
Registriert: 20. Januar 2006 10:53
Wohnort: Graz

Beitrag von originalhanno »

Hallo,
ich würde aber trotzdem noch mal Deine Hilfe benötigen.
Soweit funktioniert zwar alles, jedoch habe ich Probleme, einen Button oder eine Form die ich mit dem Designer erzeugt habe über den Code anzusprechen. Leider finde ich auch keine Tutorials zu Qt4+Designer. Die Tut. die ich gelesen, auch das Buch das ich habe, ist Qt3. Die Beispiele dort sind leider nicht 1:1 zu gebrauchen, da es z.B. setMainWidget in Qt4 nicht mehr gibt.
Ich brauch aber was, wo ich 1:1 ablesen, wie es läuft, zumindest zum Anfang, damit ich kapiere, welche Klassen angesprochen werden müssen etc.
Wenn ich mit dem Designer eine .ui erstelle, die ich dann mit qmake -project in Header verwandle, kommt da eine (z.B.) "Ui_HelloWorld.h" raus, will sagen es wird immer Ui vorangestellt. Ist das normal?
Könntest Du mir den Code schreiben, wie ich ein ganz einfaches mt Qt4Designer erstelltes Projekt anspreche?
Z.B. eine Form "MainWindow" mit einem Button darauf "Button".
Ich möchte die Form unsichtbar und sichtbar machen, und den Button enablen und disablen!

Das währe eine echte Hilfe...

Danke schon mal im Voraus

LG Michael
redDOG11_de
Beiträge: 12
Registriert: 30. Januar 2006 09:37
Wohnort: Freising
Kontaktdaten:

Beitrag von redDOG11_de »

Mahlzeit!

Zu deiner ui Frage gibt es zwar schon jede menge Posts hier im Forum, aber egal: Ja, QT4 erzeugt IMMER ein ui_XYZ.h File. QT3 hat da einen Header UND eine Implementierung gebaut. Damit ist es aber häufiger vorgekommen, dass man sich selbst erstellten Code überschrieben hat - ist mir auch schon passiert. :wink:

Um damit zu arbeiten, gibt es min. 3 Möglichkeiten. Die meiner Ansicht nach Beste ist das Subclassing.

- also, bau dir im Designer ein MainWidget mit einem Button - Name: pushButton, das MainWindow heißt einfach MainWindow
- entweder legst du im Sloteditor oder durch den Slotwizard F4 ein Signal/Slot für den Button an
- ich nehm den Wizard (Edit Menu od. wie gesagt "F4")
- ist der aktiv, wird dein Button rot umrandet
- klick auf den Knopf und zieh mit gedrückter Taste irgendwo in das Widget - es müsste eine rote Linine und sowas ähnliches wie ein Erdungszeichen sichtbar werden
- lass das Symbol irgendwo im Widget fallen
- ein Dialog erscheint, du wählst z.B. clicked() als Signal - was die anderen Signale bedeuten steht lang und breit im Assistent erklärt
- klick in das rechte Dialogfeld, dann "OK"
- der QT4 Designer kann noch keine eigenen Slots definieren!!! Machen wir von Hand
- wenn alles geklappt hat, steht jetzt im Sloteditor dein neues Signal:
pushButton()->clicked()->MainWindow-><slot>
- speicher das UI in deinen Projektordner (test.ui)
- lass qmake drüber laufen um dein ui_test.h zu erhalten
- füge zu deinem XCode Projekt eine neue Klasse (cpp + h) hinzu, sinnvollerweise heißt die dann test
- im test.h schreibst du:

Code: Alles auswählen

#ifndef TEST_H
#define TEST_H

#include <QtCore>
#include <QtGui> 

#include "ui_test.h" 

class test : public QMainWindow, private Ui::MainWindow
{
	Q_OBJECT
	
public:
	test( );
	
private slots:
	void onpushButtonSlot();
	
};
#endif
- das Vorgehen bleibt dabei grundsätzlich für alle Widgets gleich: Du leitest eine neue Klasse sowohl aus deinem UI (Namen beachten!), als auch aus QT Parentklasse ab
- in unserem Fall erbst du alle Methoden eines MainWindows und alle Eigenschaften deines UIs
- jetzt müssen wir noch implementieren und dran denken, dass wir alle Slots selbst verküpfen (also test.cpp)

Code: Alles auswählen

#include <QtGui>
#include <QtCore>

#include <stdio.h>

#include "test.h"

test::test( ):QMainWindow( )
{
	setupUi( this ); // ist aus UI:MainWindow geerbt

      connect( pushButton, SIGNAL( clicked() ), this, SLOT( onpushButtonSlot() ) ); // VON HAND VERKNÜPFEN!
}

void test::onpushButtonSlot()
{
  printf("ich wurde ganz doll gedrückt *freu*");
}
- jetzt fehlt noch eine main Klasse für das Projekt, wie die heißt ist bekanntlich wurscht

Code: Alles auswählen

#include <QtGui>
#include <QApplication>

#include <iostream>
#include <stdlib.h>

#include "test.h"

int main (int argc, char* argv[]) {
    
	QApplication app( argc, argv ); 

	test *win = new test;

	win->show();

	return app.exec();
}
So, alles weitere kannst du dem Assitent entnehmen!

Viel Spaß dabei...
originalhanno
Beiträge: 14
Registriert: 20. Januar 2006 10:53
Wohnort: Graz

Beitrag von originalhanno »

Vielen Dank !!
Was bedeutet in:
class test : public QMainWindow, private Ui::MainWindow

das UI::MainWindow
es wurde abgeleitet, ja
hierbei handlet es sich wohl um Mehrfachvererbung,
aber warum "::"
Leitet man damit nur die Eigenschaften ab?
redDOG11_de
Beiträge: 12
Registriert: 30. Januar 2006 09:37
Wohnort: Freising
Kontaktdaten:

Beitrag von redDOG11_de »

der "::" Operator bezeichnet in C++ den Kontext bzw. Namespace einer Klasse.
Deswegen schreibst du in der Implementierung void test::onpushButtonSlot(){;;}. Damit weiß der Compiler wie Header und Implementierung zusammen gehören. "Ui::" ist hier im Speziellen der sog. "namespace" der UserInterface Klassen. Ein Namespace umfasst mehrere gleichartige Klassen, hier UIs! Das siehst du auch deutlich wenn du dir das ui_test.h öffnest und ganz zum Ende scrollst. Da steht die Deklaration dazu.
Deine neue Klasse ist also zum Einen aus QMainWindow abgelitten :wink: und zum Anderen aus MainWindow im Namesapce Ui, ergo Ui::MainWindow.

klar geworden?
originalhanno
Beiträge: 14
Registriert: 20. Januar 2006 10:53
Wohnort: Graz

Beitrag von originalhanno »

Danke,
ich werde jetzt erstmal versuchenn ein kleines eigens Programm zu machen.
Man muss sichh dochh einiges klarmachen, bevor man in QT loslegen kann...

Viel Glück bei der DA...

G

Michael
redDOG11_de
Beiträge: 12
Registriert: 30. Januar 2006 09:37
Wohnort: Freising
Kontaktdaten:

Beitrag von redDOG11_de »

Danke!
Viel Spaß beim XCoden.

Grüße,
Markus
Antworten