Neue UI deklarieren, wie?
-
Hallo Leute,
ich bin ein Qt-Anfänger und ein noch größerer GUI-Anfänger.
Nun meine mit dem Projekt erstellte UI zeigt einen Willkommenstext.
Ich habe von Hand eine neue UI hinzugefügt, die Headerdatei und die Sourcedatei auch.
Die haben den selben Inhalt wie die von der UI die nur den Willkommenstext zeigt. Bloß mit frm_Main anstatt frm_Welcome.
Nun in der Main.cpp also der Haupt-Source meines Projekts, steht "frm_Welcome w;"Wenn ich drunter frm_Main x; sage, sagt er mir nicht deklarierte Variable. Auch mit der Variable w funktioniert es nicht.
Nun frage ich mich woher ich diese Variable kriege. Wo die definiert wird und so weiter.
Vielen Dank im vorraus
F. Taut
-
Hallo Florian,
offensichtlich kennt der compiler then typ "frm_Main" nicht, darum der Fehler bei der Deklaration.
Hast du in main.cpp als include auch die header-Datei von deiner neuen UI-Klasse hinzugefügt (also
#include "frm_Main.h"
)?LG,
Markus
-
Hallo Markus,
danke für deine Antwort.
Ja die Headerdatei ist eingebunden.
Der genaue Fehler:conflicting declaration 'frm_Main w'
previous declaration as 'frm_Welcome w' -
Hallo Florian,
scheinbar hast du die Variable "w" versucht, zweimal zu deklarieren - einmal als Typ "frm_Main", dann als Typ "frm_Welcome". Innerhalb desselben scopes musst du daher einen anderen Variablennamen nehmen.
LG,
Markus
-
Genau das habe ich versucht, habe versucht die Variable x zu nennen.
Dann kriege ich die Fehlermeldung nicht deklarierte Variable.Nun wollte ich wissen wo dieses 'w' deklariert wird.
-
Hm, vielleicht poste besser einmal den Code von deinen Files.
-
-- main.cpp
#include "vsys_welcome.h"
#include "vsys_main.h"
#include <QApplication>int main(int argc, char *argv[])
{
QApplication a(argc, argv);
frm_Welcome w;
frm_Main w;
// Programmname-Leiste ausblenden
w.setWindowFlags(Qt::FramelessWindowHint);
w.show();
return a.exec();
}-- vsys_welcome.h
#ifndef VSYS_WELCOME_H
#define VSYS_WELCOME_H#include <QMainWindow>
#include <QPushButton>namespace Ui {
class frm_Welcome;
}class frm_Welcome : public QMainWindow
{
Q_OBJECTpublic:
explicit frm_Welcome(QWidget *parent = 0);
~frm_Welcome();private slots:
handleButton();private:
QPushButton *btn_WhatsNew;
Ui::frm_Welcome *ui;
};#endif // VSYS_WELCOME_H
-- vsys_welcome.cpp
#include "vsys_welcome.h"
#include "ui_frm_welcome.h"frm_Welcome::frm_Welcome(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::frm_Welcome)
{
ui->setupUi(this);
}frm_Welcome::~frm_Welcome()
{
delete ui;
} -
Wenn du QtCreator verwendest, ist es übrigens vielleicht auch leichter, die neue GUI Klasse vielleicht über QtCreator hinzuzufügen statt die alte manuell zu kopieren.
-
Danke es hat funktioniert.
Ich habe nun noch ein kleines Problem für welches ich nicht extra ein neues Thema aufmachen möchte.
Hier: btn_WhatsNew->actions(addAction(QList<QAction));
Kriege ich bei 'QAction' : template argument 1 is invalid
-
Hallo Florian,
das Problem, das du ursprünglich hattest, ist, dass du keine Klasse "frm_Main" definiert hattest. Dadurch konntest du natürlich auch kein Objekt vom Typ dieser Klasse definieren.
Ich persönlich verwende die Dateinamen so wie die Klassen, die sie definieren. Dann weiß ich gleich durch das Include, welche Klassen ich zum Programm hinzugefügt habe.
Zu deiner anderen Frage:
- Was ist btn_WhatsNew für ein Objekt? QPushButton?
- Was möchtest du damit machen?
LG,
Markus
-
Danke Markus,
ja btn_WhatsNew iet ein PushButton, er soll eine Internetseite öffnen, da ich aber nicht weiß wie das geht, wollte ich ihm vorerst keine Funktion zuweisen.
-
Wenn du den Button einfach nur zum UI hinzufügen möchtest, könntest du im QtCreator z.B. auf die entsprechende .ui klicken und den Button einfach hinzufügen.
LG,
Markus
PS: Und wenn du eine Antwort hilfreich gefunden hast, wäre es nett, diese zu voten (über dem Post der Pfeil nach oben).
-
Danke,
wenn ich das ganze auskommentiere kriege ich die Fehlermeldung:
undefined reference to 'frm_Welcome::qt_metacall(QMetaObject::Call _c, int _id, void **_a)'
Das kommt aus der 'moc_vsys_welcome.cpp' welche wahrscheinlich eine automatisch erzeugte Datei ist, da ich diese nicht erzeuge, weiß nicht wie der Qt-Creator das macht.