Probleme mit Q_OBJECT, auch nach google

Alles rund um die Programmierung mit Qt
Antworten
Laubi
Beiträge: 8
Registriert: 23. Mai 2011 21:46

Probleme mit Q_OBJECT, auch nach google

Beitrag von Laubi »

Hallo,

ich bin ein absoluter einsteiger was QT betrifft, und so erbitte ich euch um Hilfe.

Ich bin noch Schüler und gehe in eine Programmierschule, allerdings will mein Lehrer jetzt mit MFC anfangen, und ich mag das einfach nicht, also hab ich mich entschieden Qt zu benützen.

Nun hab ich mal n bisschen gegoogelt und Qt auch erfolgreich installiert für Visual Studio 2010 Ultimate (Schul-Lizenz)

nun habe ich folgenden beispielcode:
main.cpp:

Code: Alles auswählen

#include <QtGui\qapplication.h>
#include "mainFrame.h"

int main(int argc,char **argv){
	::QApplication app(argc,argv);
	
	mainFrame *frame=new mainFrame();
	frame->show();


	return app.exec();
}
mainFrame.cpp:

Code: Alles auswählen

#include "mainFrame.h"


mainFrame::mainFrame(void){
	
	//alle objekte initialisieren
	this->init();

	this->setupSS();

	//menü generieren
	this->genmenu();

	//das fenster hauptbestanden
	this->setWindowTitle("Laubi's Testprogramm");
	this->resize(800,500);
	
}
void mainFrame::genmenu(void){
	this->menu_file->setTitle("&Datei");
	this->menu_help->setTitle("&Help");
	
	this->about_action->setText("&About");
	this->exit_action ->setText("&Exit");

	this->menu_help->addAction(this->about_action);
	this->menu_file->addAction(this->exit_action);

	this->menbar->addMenu(this->menu_file);
	this->menbar->addMenu(this->menu_help);

	this->setMenuBar(this->menbar);
}
void mainFrame::init(void){
	this->menu_file=new QMenu();
	this->menu_help=new QMenu();
	this->menbar=new QMenuBar();

	this->about_action =new QAction(this);
	this->exit_action  =new QAction(this);
}

void mainFrame::setupSS(void){
	this->connect(this->exit_action,SIGNAL(triggered()),this,SLOT(quit()));
}

mainFrame::~mainFrame(void)
{
}

mainFrame.h:

Code: Alles auswählen

#pragma once

#include <QtGui\qwidget.h>
#include <QtGui/qmenubar.h>
#include <QtGui/qmenu.h>
#include <QtGui/qmainwindow.h>
#include <QtGui/qaction.h>

class mainFrame :public ::QMainWindow
{
	Q_OBJECT
private:
	::QMenuBar *menbar;

	::QMenu    *menu_help;
	::QMenu    *menu_file;
	::QAction  *exit_action,
			   *about_action;
public:
	mainFrame(void);
	~mainFrame(void);
private:
	void genmenu(void);
	void init(void);
	void setupSS(void);
private slots:
		void quit();
};
Folgende Projekteinstellungen:
Zusätzliche Includeverzeichnisse:
D:\Qt\4.7.3\include;%(AdditionalIncludeDirectories)

Zusätzliche Bibliotheksverzeichnisse:
D:\Qt\4.7.3\lib;%(AdditionalLibraryDirectories)
Eingabe:
qtmaind.lib;QtCored4.lib;QtGuid4.lib;%(AdditionalDependencies)


So, nun habe ich, wie man sieht, in der header das Q_OBJECT, damit ich Events nützen kann, allerdings ist dies (für mich) schwerer als gedacht.

kurz google bringt mir das word "moc", nun habe ich nach einem tutorial im internet noch folgendes eingefügt:

Benutzerdefinierter Buildschritt:
Befehlszeile: $(QTDIR)\bin\moc mainFrame.h -o tmp\moc\moc_mainFrame.cpp
Ausgabe: tmp\moc\moc_mainFrame.cpp
Zusätzliche abhängigkeiten:
$(QTDIR)\bin\moc.exe;


nun steht ich muss die erzeugte datei linken, die datei bekomme ich indem ich das programm erzeuge, allerdings bricht er bei mir immer ab mit:

Code: Alles auswählen

mainFrame.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual struct QMetaObject const * __thiscall mainFrame::metaObject(void)const " (?metaObject@mainFrame@@UBEPBUQMetaObject@@XZ)".
1>mainFrame.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void * __thiscall mainFrame::qt_metacast(char const *)" (?qt_metacast@mainFrame@@UAEPAXPBD@Z)".
1>mainFrame.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual int __thiscall mainFrame::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@mainFrame@@UAEHW4Call@QMetaObject@@HPAPAX@Z)".
nun, könnt ihr mir vielleicht helfen?
ich bin im dem GUI-Gebiet noch kein absoluter Anfänger (hab mit wxWidgets rumgespielt) allerdings bietet Qt viel mehr und einfachere Wege um das hinzubekommen was man braucht.

danke im vorraus
Laubi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Benutze eine pro-Datei aus der dann das vcproj erstellt wird, trag die Dateien korrekt in SOURCES und HEADERS ein und es geht.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Laubi
Beiträge: 8
Registriert: 23. Mai 2011 21:46

Beitrag von Laubi »

danke für die antwort, aber ich habe leider keinen schimmer wie man das macht, wie gesagt, absoluter Qt Anfänger.

qmake -project derstellt mir die bin.pro, aber ich habe leider keinen plassen schimmer, wie ich die jetzt mit visual studio verbinde und was ich reinschreibe >.<

Und es wurde keine datei von vs generiert, da ich grundsätzlich normalerweise immer ein leeres projekt erstelle, um von 0-bereich anzufangen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Laubi
Beiträge: 8
Registriert: 23. Mai 2011 21:46

Beitrag von Laubi »

danke, jetzt liefert es keinen fehler mehr :)


aber etwas ist doch noch was mich stört:

immer wenn ich this-> mache (oder void mainFrame::) kommt das fenster wo die ganzen eigenschaften und methoden eingetragen sind.

nun kommt das fenster auch, allerdings schliest es sich sofort wieder, und ich hab einfach keinen plan warum.

wisst ihr vl warum?

EDIT:
Ich hab das add-on "VS Commands 2010" deaktiviert und VS neu gestartet, jetzt gehts ohne probleme.

Ich nehme an es kolidiert irgendwie mit meinem computer <.<


auf alle fälle danke für die hilfe, hat mir wirklich toll weitergeholfen :)


eine letzte frage aber noch :P

könnt ihr mir ein gutes Buch über QT empfehlen?

ich habe das buch "Qt 4.6 - GUI-Entwicklung mit C++" im Auge, da ich vom gleichen author schon "C++ von A bis Z" gelesen habe und sehr zufrieden bin.

oder hat von euch einer einwände oder bessere vorschläge?

danke nochmal ;)
Antworten