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();
}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)
{
}
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();
};
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)".
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