Anfänger versteht nichts...

Alles rund um die Programmierung mit Qt
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Anfänger versteht nichts...

Beitrag von SoundsO »

Ich weiß das diese Frage SUPER Basic ist und hoffentlich von jedem in 10 s. beantwortet ist, aber ich komm irgendwie nicht weiter und alle Beispiele sind entweder so simple, das sie mir nicht helfen, oder direkt zu kompliziert. Haben in der Uni mit qt3/vc++ angefangen und jetzt wollte ich zuhause mit qt4/vc++ arbeiten, und da scheint einiges anders zu sein. Mein Problem ist, ich versteh nicht wie ich aus meinem Funktionscode heraus beispielsweise einen Labeltext ändere. Vieleicht hat jemand ein passendes Beispiel!

Habe ein Qt-Applikation Projekt erstellt, mit dem Designer meine Anwendung mit einigen Labels versehen und im Quellcode im Konstruktor einen Timer erzeugt und mit einer Funktion slot "setLabels()" versehen so das diese jetzt nach jedem Timer aufgerufen wird. Aber wie kommt die Funktion jetzt an das Label??? Sicher ist das ein Basic, aber ich finde nichts wo ich es kappiere. Leider auch kein großer C++-Kenner. Da ich in Spanien bin auch schwer mit eng./deut. Literatur. Vielen Dank für euer Verständniss!

Code: Alles auswählen

class Counter : public QMainWindow
{
...
public slots:
	void setLabels();
};

Code: Alles auswählen

Counter::Counter(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
..
	QTimer *timer = new QTimer(this);
        connect(timer, SIGNAL(timeout()), this, SLOT(setLabels()));
        timer->start(1000);

	setLabels();
}

void Counter::setLabels()
{
    // HIER SOLL DAS LABEL GESETZT WERDEN
}
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

in dem Konstruktor schrebste: ui.setupUi(this);

dann in

void Counter::setLabels()
{
ui.myLabel->setText("fdfgdfgdf");
}
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Haha, manchmal ist die Welt soooo einfach! Vielen Dank...
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Besonders die Qt-Welt ist sehr einfach... :)
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Hab auch langsam gefallen an Qt gefunden. Jetzt wollt ich in meiner Anwendung ein Bild darstellen. Dachte es wäre am einfachsten eine xpm-Datei zu erstellen, diese im Designer als Resource zuzufügen und einem Label als pixmap zu geben. Klappt auch super ... im Designer. Nach dem kompilieren seh ich kein Bild. Hab ich was vergessen? Gibt es sonst einen guten Weg einfach ein Bild (jpg...) darzustellen? Hab ohne Erfolg was mit QGraphicsView und Co. rumgespielt aber noch nichts erreicht.
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Wenn du eine XPM schon erzeugt hast, dann kannste sie in deiner CPP-Datei inkludieren (XPM ist ein ASCII-Format) und dann die darin beschriebene Variable direkt für die Instanzierung der QPixmap benutzen.

Bei GraphicsView kannste QGraphicsPixmapItem benutzen um dein Bild darzustellen:

QGraphicsScene myScene;
QGraphicsView myView(&myScene);

myScene.addItem(new QGraphicsPixmapItem(myPixmap, &m_scene));

myView.show();
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Also so hat es jetzt beim kompilieren geklappt, aber das Feld ist immer noch leer (im Header natürlich auch ein #include "foto.xpm"). Kann was mit dem Bild nicht stimmen? Wie gesagt, im Designer wird es angezeigt wenn ich es einem Label zuweise... Wie würde ich ein jpg reinbekommen? Über QImage? Nochmal danke für die super Hilfe.

Code: Alles auswählen

	QGraphicsScene scene;
	ui.graphicsView->setScene(&scene);
	QPixmap pixmap( foto_xpm );
	scene.addPixmap( pixmap );
	ui.graphicsView->show();
Wenn ich die lib statisch linke braucht man auf anderen PC's keine qt etc, oder? Er will bei mir immer die qt4core.dll, jemand ne Ahnung wo man das bei 2003 angeben kann? Sorry, hab leider in vc++ sehr wenig Erfahrung...
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

SoundsO hat geschrieben:Wenn ich die lib statisch linke braucht man auf anderen PC's keine qt etc, oder? Er will bei mir immer die qt4core.dll, jemand ne Ahnung wo man das bei 2003 angeben kann? Sorry, hab leider in vc++ sehr wenig Erfahrung...
rechte Maustaste auf das Projekt im TreeView, Eigenschaften, dann im Dialog unter Configuration-->C/C++ --> General-->Additional Include directories Include-Pfade setzen und unter Configuration-->Linker-->Input die Qt-Libs angeben.

JPEG's kannste mit Hilfe von QImage, aber auch mit QPixmap::load() laden....

Mach dein QPixmap Object zum Klassenmember, dann wird dein Code wahrscheinlich funktionieren...
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Danke für deine Mühe!!! Das mit der Grafik bekomm ich sicher irgendwie hin. Aber das statische Linken macht mich verrückt. Ich such schon seit ner Stunde nach Hilfe. Unter Linker->Eingabe->Zusätz. Abh. steht " qtmain.lib QtCore4.lib QtGui4.lib" und unter C++->Allgemein->Zusätzliche Includev. ".\GeneratedFiles;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui", alles bei der Installation automatisch erzeugt. Wenn ich aber ne Exe ausführe sagt er, die dll würde fehlen.
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

aaa, ok... du must dem System mitteilen wo die Qt dlls liegen. Unter Windows musst du die PATH Variable erweitern um C:\Qt\4.x.x\bin
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Hab meine PATH wie beschrieben um den bin-Pfad erweitert und zusätlich noch eine Umgebungsvariable QTDIR zum Root-Pfad zu QT erstellt und jetzt klappt es. Nochmal vielen Dank!!!
Better hello world than hello kitty...
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Ahhhh, langsam wirds mir ja echt peinlich. Zwar läuft die exe bei mir (klar, weiß ja wo die dlls sind), auf fremden PC's ohne qt will er aber immer noch die dll. Also scheint er ja immer noch nicht die libs statisch gelinkt zu haben. Tut mit echt leid, aber diese Dinge, besonders vc++, sind relativ neu für mich...
Better hello world than hello kitty...
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

ja, klar. Defaultmässig sind die Qt-Sachen dynamisch kompiliert. Du must also zuerst die Qt Sourcen als statische Lib übersetzen...
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Ja das hab ich gerad von nem Freund auch schon erfahren. Hatte die Evaluation Version drauf und heut morgen die Open-Source mit Patch kompiliert. Also, kompiliers nochmal, Sam ;) Noch einmal tausend Dank für deine Hilfe!
Better hello world than hello kitty...
SoundsO
Beiträge: 10
Registriert: 23. März 2007 16:54

Beitrag von SoundsO »

Also wenn ich qconfigure mit -static mache bricht er später beim nmake ab. Hab wo anders gelesen das ich nicht der einzige zu sein schein, der das Problem hat. Hat es schonmal einer erfplgreich unter Windows geschafft?
Better hello world than hello kitty...
Antworten