[c++/QT] Fensterapp startet nicht neu &Eclipse Probleme(läuft nicht richtig)

kickerxy123

Erfahrenes Mitglied
Hallo,
zunächst einige Daten...

Win XP 32 Bit (Home)
Gigabyte GA-p35-DS3 Mainboard
---
Eclipse (kostenlose Version)
mit QT4.0.0

mein Vorgehen bezgl. der Installation:

eclipse-cpp-europa-winter-win32.zip heruntergeladen
MinGW-4.1.0.exe heruntergeladen
gdb-5.2.1-1.exe heruntergeladen
qt-win-opensource-desktop-4.0.0.zip heruntergeladen
qt-eclipse-integration-win32-1.0.1.exe heruntergeladen

Dann:
1. MinGW installiert (Full installation)
2. gdb installiert
"mingw32-make" in cmd getestet, geht soweit("no Targets spedified...Stop.").
3.QT entzippt und nach C:\QT4.0.0 verschoben
4. cmd->cd C:\QT4.0.0 -> "configure -platform win32-g++"
Zugestimmt dem Lizenzvertrag
"mingw32-make" (dauerte ne Stunde)
5.Eclipse nach C:\Eclipse verschoben
6.QT Integration installiert ->Eclipse gestartet.
--

Soweit reibungslos, mein erstes Progi lief auch, allerdings stellten sich schon bald Probleme ein:
Zunächst hatte ich das Problem, dass ein Error namens "Launching AddressBook.exe failed. Permission denied" auftrat. Das Bauen des Projekts (->rechtsklick auf Projekt->Make Targets->Debug) lief dennoch. Zuletzt half mir nur eine Neuinstallation, das selbe Spiel von vorne, nach einigen "guten" Kompilierungen dieser Error. :confused:
--

2. Problem:
Auch kam schnell das Problem auf, dass er nicht mehr kompiliert, wenn ich es ihm sage, sondern nur ausführt. So hab ich mich ne Zeit lang darauf beschränkt Programmierfehler nur noch durch Build zu finden, da der Compiler nciht verlässlich ist.
--

3.Problem(nicht technisch):
ich bin dabei ein Spiel(Minesweeper) zu programmieren. Läuft auch schon ganz gut, nur habe ich aktuell 2 Probleme:

a)
Zufallszahl
Ich brauche eine zufällig generierte Zahl, die auch immer anders sein sollte. Ich hab schon Ansätze gehört, wo beispielsweise immer die "44" oder so generiert wurde...
Ferner habeich Ansätze zu Randomize(), srand, Liveticket,rand,... gehört.

b)
Objekt-Signal-Objekt-Slot...

Ich habe einen Button namens "Neustart", heir mein angefertigter Code:

void Start::on_pushButton6_clicked() //Neustartbutton
{
ui.btn_1->setText("");
ui.btn_2->setText("");
ui.btn_3->setText("");
ui.btn_4->setText("");
ui.btn_5->setText("");
ui.btn_6->setText("");
ui.btn_7->setText("");
ui.btn_8->setText("");
ui.btn_9->setText("");
mine=0;

};

Hintergrund: der Text des Buttons gibt entweder "X"(mine) oder zahl der umliegenden Minen an.

die Funktion wird jedoch überhaupt nicht ausgeführt, er reagiert gar nicht auf Klick.
Weitere Ansätze von mir(ohne Erfolg):
Start neu;
neu.exec(); //oder reject oder destroy

keine Auswirkungen! :(


(Compilereinstellungen:
Build Command: Use default
Stop on first build error
Build on resource save(Auto build)
Build(Incremental Build)
Clean clean
)
(Debugger: gdb/mi)
Anmerkung:
Teilweise ging der Permission denied Error weg, wenn ich anstelle von "use default" den command "mingw32-make" verwende, allerdings war dann meist das in 2) geschilderte Problem.
--
4.Problem
Teilweise wurde wärend des Buildens oder Compilieren die AddressBook.exe gelöscht und er führte nichts mehr aus...


hat meiner Meinung nach nciht mir irgendeinem dieser Probleme zu tun, weil schon immer da, aber ich erwähne mal folgende Warnungen:

>>

Severity and Description Path Resource Location Creation Time Id
Invalid project path: Include path not found (C:\QT4.0.0\include\QtDBus). AddressBook pathentry 1205960211843 163
Invalid project path: Include path not found (C:\QT4.0.0\include\QtScript). AddressBook pathentry 1205960211843 161
Invalid project path: Include path not found (C:\QT4.0.0\include\QtSvg). AddressBook pathentry 1205960211843 162
Invalid project path: Include path not found (C:\QT4.0.0\include\QtTest). AddressBook pathentry 1205960211843 160
Invalid project path: Include path not found (C:\QT4.0.0\include\QtUiTools). AddressBook pathentry 1205960211843 164


>>
Anmerkung2:
Die Technische Probleme hatte ich auch schon früher ohne QT
Anmerkung3:
bitte nicht Tipps wie"formatieren", die Probleme hatte ich schon vor nem halben Jahr (seit dem 2 mal neu formatiert)


Inzwischen hab ich alles 7mal Neuinstalliert und jedes Mal läufts höchstens nen halben Tag (ohne Neustart wohlgemerkt...weder Eclipse noch Win)

Ich hoffe ihr könnt mir helfen, ich verzweifel allmählich...

liebe Grüße
eXo|Kickerxy123
 
Hi also das mit der Installation ist sehr merkwürdig und da kenne ich mich auch nicht wirklich aus. In der neusten Qt Version ist aber MinGW schon drin.
Ich habe es nach einer Projektanleitung gemacht und das läuft auch wunderbar.
kleine Anleitung Vielleicht hilft es ja...

Ich persönlich fande Eclipse realtiv umständlich daher benutze ich Qt mit CodeBlocks, ist halt nur bissl blöd weil man da das Makefile selber machen muss, damit es auf allen Umgebungen läuft.

mfg
 
Hallo,
ich habe mich nun entscheiden Code::Block auszuprobieren...,
ich bekomme aber leider immer den Fehler "undefined reference to `vtable for<clasname>` "
das gleich in Mehrfacher Ausführung für die Klassen Bestzeiten und Menue...

allg. Info: QT4.0.0
MinGW
Code::Block
32Bit System(Win XP home)


also.. hier die einzelnen Dateien, die ich versucht habe zu kompilieren:


[main.cpp:]

#include "menue.h"

#include <QtGui>
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Menue w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}

________________________________
[menue.cpp:]

#include "menue.h"
#include "bestzeiten.h"

Menue::Menue(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}

Menue::~Menue()
{

}

void Menue::on_addButton_clicked()
{
Bestzeiten best(this);
best.exec();
};
_______________________________
[menue.h:]


#ifndef MENUE_H
#define MENUE_H

#include <QtGui/QWidget>
#include "ui_menue.h"

class Menue : public QWidget
{
Q_OBJECT

public:
Menue(QWidget *parent = 0);
~Menue();

private:
Ui::MenueClass ui;
private slots:

void on_addButton_clicked();
void on_pushButton_3_clicked();
void on_startbtn_clicked();
void on_aboutbtn_clicked();
};

#endif // MENUE_H

______________________________
[ui.menue.h:]
#ifndef UI_MENUE_H
#define UI_MENUE_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

class Ui_MenueClass
{
public:
QPushButton *aboutbtn;
QPushButton *startbtn;
QPushButton *addButton;
QPushButton *pushButton;
QPushButton *pushButton_3;

void setupUi(QWidget *MenueClass)
{
MenueClass->setObjectName(QString::fromUtf8("MenueClass"));
MenueClass->resize(QSize(414, 332).expandedTo(MenueClass->minimumSizeHint()));
aboutbtn = new QPushButton(MenueClass);
aboutbtn->setObjectName(QString::fromUtf8("aboutbtn"));
aboutbtn->setGeometry(QRect(320, 110, 75, 23));
startbtn = new QPushButton(MenueClass);
startbtn->setObjectName(QString::fromUtf8("startbtn"));
startbtn->setGeometry(QRect(320, 210, 75, 23));
addButton = new QPushButton(MenueClass);
addButton->setObjectName(QString::fromUtf8("addButton"));
addButton->setGeometry(QRect(320, 250, 75, 23));
pushButton = new QPushButton(MenueClass);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(320, 290, 75, 23));
pushButton_3 = new QPushButton(MenueClass);
pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
pushButton_3->setGeometry(QRect(320, 160, 75, 23));
retranslateUi(MenueClass);
QObject::connect(pushButton, SIGNAL(clicked()), MenueClass, SLOT(close()));

QMetaObject::connectSlotsByName(MenueClass);
} // setupUi

void retranslateUi(QWidget *MenueClass)
{
MenueClass->setWindowTitle(QApplication::translate("MenueClass", "Menue"));
aboutbtn->setText(QApplication::translate("MenueClass", "about"));
startbtn->setText(QApplication::translate("MenueClass", "Start"));
addButton->setText(QApplication::translate("MenueClass", "Bestzeiten"));
pushButton->setText(QApplication::translate("MenueClass", "Beenden"));
pushButton_3->setText(QApplication::translate("MenueClass", "Anleitung"));
Q_UNUSED(MenueClass);
} // retranslateUi

};

namespace Ui {
class MenueClass: public Ui_MenueClass {};
} // namespace Ui

#endif // UI_MENUE_H
________________________________
[bestzeiten.cpp:]

#include "bestzeiten.h"
#include<iostream>
#include <fstream>
#include <ctype.h>
#include <string>
#include <ctime>
#include <sstream>

using namespace std;

Bestzeiten::Bestzeiten(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);



short altbest;

ifstream fin("C:\\bestzeiten.dll"); //Bestzeitauslesen


//[USW....]
}
Bestzeiten::~Bestzeiten()
{
________________________________
[bestzeiten.h:]

#ifndef BESTZEITEN_H
#define BESTZEITEN_H

#include <QtGui/QDialog>
#include "ui_bestzeiten.h"

class Bestzeiten : public QDialog
{
Q_OBJECT

public:
Bestzeiten(QWidget *parent = 0);
~Bestzeiten();

private:
Ui::BestzeitenClass ui;
};

#endif // Bestzeiten_H
_________________________________

[ui_bestzeiten.h:]


#ifndef UI_BESTZEITEN_H
#define UI_BESTZEITEN_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>

class Ui_BestzeitenClass
{
public:
QLabel *label;
QLabel *nameText;
QPushButton *pushButton;
QLabel *bestzeit_1;

void setupUi(QDialog *BestzeitenClass)
{
BestzeitenClass->setObjectName(QString::fromUtf8("BestzeitenClass"));
BestzeitenClass->resize(QSize(441, 257).expandedTo(BestzeitenClass->minimumSizeHint()));
label = new QLabel(BestzeitenClass);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(120, 100, 41, 61));
nameText = new QLabel(BestzeitenClass);
nameText->setObjectName(QString::fromUtf8("nameText"));
nameText->setGeometry(QRect(120, 20, 151, 41));
pushButton = new QPushButton(BestzeitenClass);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(150, 230, 75, 23));
bestzeit_1 = new QLabel(BestzeitenClass);
bestzeit_1->setObjectName(QString::fromUtf8("bestzeit_1"));
bestzeit_1->setGeometry(QRect(170, 80, 181, 101));
retranslateUi(BestzeitenClass);
QObject::connect(pushButton, SIGNAL(clicked()), BestzeitenClass, SLOT(accept()));

QMetaObject::connectSlotsByName(BestzeitenClass);
} // setupUi

void retranslateUi(QDialog *BestzeitenClass)
{
BestzeitenClass->setWindowTitle(QApplication::translate("BestzeitenClass", "Bestzeiten"));
label->setText(QApplication::translate("BestzeitenClass", "1."));
nameText->setText(QApplication::translate("BestzeitenClass", "Bestzeiten:"));
pushButton->setText(QApplication::translate("BestzeitenClass", "OK"));
bestzeit_1->setText(QApplication::translate("BestzeitenClass", "unbekannt"));
Q_UNUSED(BestzeitenClass);
} // retranslateUi

};

namespace Ui {
class BestzeitenClass: public Ui_BestzeitenClass {};
} // namespace Ui

#endif // UI_BESTZEITEN_H
__________________________________________________________________________



Anmerkung: der verwendete Code müsste eigentlich okay sein, denn ich habe ihn in Eclipse erstellt und dort funktionierte es wunderbar, [hier allerdings nur verkürtzt dargestellt] ist ein Auszug aus einer Spielidee...

Wieso geht es nicht mehr unter C::B? Bzw, was muss ich verändern?:confused:

Bitte helft mir...
mfg: eXo|kickerxy123
 
Also wenn du Qt benutzt mit dem Macro Q_OBJECT dann musst du das Makefile selbst generieren.

In der cmd (am besten im projectverzeichnis):
Code:
qmake -project
Jetzt wurde die Project Datei erzeugt "Projectordnername.pro". Diese Projectdatei wird nun benutzt:
Code:
qmake Projectordnername.pro
Im Codeblocks machst dann Rechtsklick auf dein Project -> Properties und Haken bei "Custom Makefile"
Warum das so ist das steht alles in der mitgelieferten Hilfe.

Hoffe das hilft dir bzw. das es kein schon bekannter Vorgang ist :)

mfg
 
erstmal vielen Dank!
Es hat, so wie dugesagt hast, geklappt, ich habe jetzt alle nötigen Dateien (Makefile, Makefile.Debug, Makefile.Release,.....). Wenn ich das nun aber kompiliere kommen die wie schon beschilderten Fehler..., eine .exe ist deshalb nicht vorhanden. bei qmake <Projectordner>.pro hat er auch angewarnt: uic: File generated with too old Version of QT Designer.

Kann es daran liegen? Oder doch noch wo anders...

Lg
eXo|kickerxy
 
Zurück