[gelöst] MainWindow mit Dialog Verknüpfen (mit Designer)
[gelöst] MainWindow mit Dialog Verknüpfen (mit Designer)
Hi,
ich bin noch nicht so lange mit QT im bunde und hab ein Projekt zu erledigen in dem ich eine XML Datei auslesen muss und Spezifische Daten suchen und ausgeben muss. Ich hab mir ein MainWindow und einen Passenden Dialog als Klasse über den Designer erstellt in einem Projekt nun habe ich das Problem das ich gerne die im Dialogfenster eingebundenen LineEdit felder mit den Daten befüllen möchte aber ich bekomme keine Verbindung zu dem LineEdit feld hin.
Den Hauptteil des Programmes hab ich im .cpp des MainWindows untergebracht. Sowie auch den Teil in dem ich mit dem DOM praser die Daten suche.
Alle versuche die Widgets die im Dialogfeld eingebettet sind anzusprechen sind bisher gescheitert.
Momentan frage ich mich ausserdem ob der Designer überhaupt zützlich ist, oder om man mit Qt lieber in der Konsole alles programmieren sollte und den Designer aussen vor lässt?
ich bin noch nicht so lange mit QT im bunde und hab ein Projekt zu erledigen in dem ich eine XML Datei auslesen muss und Spezifische Daten suchen und ausgeben muss. Ich hab mir ein MainWindow und einen Passenden Dialog als Klasse über den Designer erstellt in einem Projekt nun habe ich das Problem das ich gerne die im Dialogfenster eingebundenen LineEdit felder mit den Daten befüllen möchte aber ich bekomme keine Verbindung zu dem LineEdit feld hin.
Den Hauptteil des Programmes hab ich im .cpp des MainWindows untergebracht. Sowie auch den Teil in dem ich mit dem DOM praser die Daten suche.
Alle versuche die Widgets die im Dialogfeld eingebettet sind anzusprechen sind bisher gescheitert.
Momentan frage ich mich ausserdem ob der Designer überhaupt zützlich ist, oder om man mit Qt lieber in der Konsole alles programmieren sollte und den Designer aussen vor lässt?
Zuletzt geändert von Vadhagh am 17. Februar 2010 14:22, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Das ich die Verknüpfung per Hand machen muss ist mir klar. Nur habe ich das Problem das ich das Edit fenster nicht aufgerufen bekomme. Ich habe in einem Projekt ein MainWindow als Klasse und zusätzlich noch ein Dialog als eigene Klasse eingfügt. Die jewiligen designs zwecks Zeitersprnis im deisgner ertsellt. Innerhalb der jeweiligen Klassen weis ich auch das ich sie mit ui->... aufrufen kann. Aber sobald ich versuche ein Objekt aus einer anderen Klasse aufzurufen das mit dem Designer erstellt wurde komme ich nicht weiter.
Die einzelnen header Datein habe ich auch schon eingebunden, nur weis ich nicht wie ich ein Objekt das in der ui erstellt und somit in der ui_***.h haeder Datei Instanziert ist für andere Klassen aufrufbar machen kann, denn diese datei kann nicht geändert werden.
MfG
Maik
Die einzelnen header Datein habe ich auch schon eingebunden, nur weis ich nicht wie ich ein Objekt das in der ui erstellt und somit in der ui_***.h haeder Datei Instanziert ist für andere Klassen aufrufbar machen kann, denn diese datei kann nicht geändert werden.
MfG
Maik
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Häh?
Ich glaube da fehlen irgendwie Grundlagen
1. Ein MainWindow von QMainWindow abgeleitet mit den ui's aus dem Designer
2. z.B. ein Dialog von QDialog abgeleitet mit der anderen ui-Datei.
Wenn der Dialog aufgerufen wird einfach im MainWindow eine Instanz von Dialog erzeugen, anzeigen und fertig.
Dazu gibts übrigens auch gute Doku...
Ich glaube da fehlen irgendwie Grundlagen
1. Ein MainWindow von QMainWindow abgeleitet mit den ui's aus dem Designer
2. z.B. ein Dialog von QDialog abgeleitet mit der anderen ui-Datei.
Wenn der Dialog aufgerufen wird einfach im MainWindow eine Instanz von Dialog erzeugen, anzeigen und fertig.
Dazu gibts übrigens auch gute Doku...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Also nochmal von vorn, vielleicht ist dasganze falsch rübergekommen.
Ich bin grade dabei mich in Qt einzuarbeiten. Ich nutze den Qt Creator unter Windows.
Ich habe angefangen mit einem Leeren Projekt und mir dort über hinzufügen zwei Qt-Dersigner Formularklassen erstellt. Eine mit einem MainWindow als Hauptoberfläche und eine als Dialog (damit ich den Dialog nicht kommplett von Hand erstellen muss).
Den Hauptteil meines Programmes hab ich in der Quelldatei des MainWindows untergebracht. Dort habe ich auch eine XML abfrage gestartet, nun möchte ich aber das die Daten die dort ausgelesen werden in spezifischen fenstern des Dialoges dagestellt werden. Das öffnen des Dialoges und verknüpfen des Dialogfensters an sich war nicht das Problem, nur komme ich nicht aus der Quelldatei des MAinWindows an die Textfelder innerhalb des Dialoges ran. Ich weis halt nicht wie ich diese aufrufen kann. Und alles was ich an Literatur habe behandelt immer nur Programme die rein in Konsole geschrieben wurden, und die Dialoge inerhalb einer Quelldatei per Hand erstellt wurden.
Sry wenn dies nicht das Lvl der sonstigen Fragen etspricht aber das ist momentan ein Problem an dem ich schon seit 2 Tagen hänge und echt nicht mehr weiter komme.
MfG,
Maik
Ich bin grade dabei mich in Qt einzuarbeiten. Ich nutze den Qt Creator unter Windows.
Ich habe angefangen mit einem Leeren Projekt und mir dort über hinzufügen zwei Qt-Dersigner Formularklassen erstellt. Eine mit einem MainWindow als Hauptoberfläche und eine als Dialog (damit ich den Dialog nicht kommplett von Hand erstellen muss).
Den Hauptteil meines Programmes hab ich in der Quelldatei des MainWindows untergebracht. Dort habe ich auch eine XML abfrage gestartet, nun möchte ich aber das die Daten die dort ausgelesen werden in spezifischen fenstern des Dialoges dagestellt werden. Das öffnen des Dialoges und verknüpfen des Dialogfensters an sich war nicht das Problem, nur komme ich nicht aus der Quelldatei des MAinWindows an die Textfelder innerhalb des Dialoges ran. Ich weis halt nicht wie ich diese aufrufen kann. Und alles was ich an Literatur habe behandelt immer nur Programme die rein in Konsole geschrieben wurden, und die Dialoge inerhalb einer Quelldatei per Hand erstellt wurden.
Sry wenn dies nicht das Lvl der sonstigen Fragen etspricht aber das ist momentan ein Problem an dem ich schon seit 2 Tagen hänge und echt nicht mehr weiter komme.
MfG,
Maik
Das ist mir alles klar, ich hab aber den Dialog als als Designerklasse eingefügt d.h. mit eigener Quelldatei.
Möchte aber einen QString der vom DOM Praser erzeugt wird und sich in der Quelldatei des MainWindows ( "MainWindow" ist auch der Name des MainWindows hätte ich vielleicht mal erwänen sollen) befindet in ein QLineEdit Feld einfügen das sich im Dialog befindet und daher ausserhalb des Namespace Ui ( der hier nur den Breich des MainWindows ausfüllt).
zur verdeutlichung:
Mein Projekt besteht aus zwei durch den Designer erzeigten Klassen
MainWindow.ui
Dialog.ui
MainWindow.h
Dialog.h
Main.cpp
MainWindow.cpp
Dialog.cpp
Möchte aber einen QString der vom DOM Praser erzeugt wird und sich in der Quelldatei des MainWindows ( "MainWindow" ist auch der Name des MainWindows hätte ich vielleicht mal erwänen sollen) befindet in ein QLineEdit Feld einfügen das sich im Dialog befindet und daher ausserhalb des Namespace Ui ( der hier nur den Breich des MainWindows ausfüllt).
zur verdeutlichung:
Mein Projekt besteht aus zwei durch den Designer erzeigten Klassen
MainWindow.ui
Dialog.ui
MainWindow.h
Dialog.h
Main.cpp
MainWindow.cpp
Dialog.cpp
-
lindomatic
- Beiträge: 2
- Registriert: 14. Februar 2010 15:40
Du hast 2 klassen?
ein MainWindow und ein Dialog?
wenn dann brauchst einen dialog pointer als member deines MainWindow.
Initialiere diesen pointer im konstruktor des Mainwindow, oder in der MEthode wo er auftauchen soll.
nun kannst du überall in deinem MainWindow über den dialog pointer auf die
member des dialogs (lineedits) zugreifen.
oder sehe ich das falsch?
Ansonsten raff ich deine Problemstellung nich.
ein MainWindow und ein Dialog?
wenn dann brauchst einen dialog pointer als member deines MainWindow.
Initialiere diesen pointer im konstruktor des Mainwindow, oder in der MEthode wo er auftauchen soll.
nun kannst du überall in deinem MainWindow über den dialog pointer auf die
member des dialogs (lineedits) zugreifen.
oder sehe ich das falsch?
Ansonsten raff ich deine Problemstellung nich.
Einfach so von MainWindow auf den Dialog zuzugreifen geht nicht, da die UI private ist. Es kann nur die Klasse, der die Oberfläche auch gehört, darauf zugreifen. Wenn du einen QString im Dialog anzeigen willst, dann hast du dafür 2 Möglichkeiten:
Entweder den String als Argument im Konstruktor des Dialogs mitgeben und dann in der Dialogklasse in das lineEdit-Feld schreiben oder das ganze per Signal-Slot Verbindung nachträglich übergeben.
Entweder den String als Argument im Konstruktor des Dialogs mitgeben und dann in der Dialogklasse in das lineEdit-Feld schreiben oder das ganze per Signal-Slot Verbindung nachträglich übergeben.
-
lindomatic
- Beiträge: 2
- Registriert: 14. Februar 2010 15:40
Danke das ist schonmal eine echte Hilfe^^.
Nur hab ich noch echte probleme mit der Signal Slot verbindung.
Ich hab keine ahnung wie ich einen QString als SIGNAL verpacken soll um ihn dann im SLOT SetText des edit feldes ab zu fangen.
bis hier erstmal danke für die schnelle hilfe^^
MfG
Maik
P.S.
Sry aber ich komme aus der Automatisierungstechnik und dort ist die Programmierung mit Structurierten Text etwas anders. Bin grade dabei meine C++ Grundlagen zu vertiefen und mich dabei in Qt einzuarbeiten.
Leider sind die meisten Bücher zu Qt immer nur aus der sicht der Konsole geschrieben.
Nur hab ich noch echte probleme mit der Signal Slot verbindung.
Ich hab keine ahnung wie ich einen QString als SIGNAL verpacken soll um ihn dann im SLOT SetText des edit feldes ab zu fangen.
bis hier erstmal danke für die schnelle hilfe^^
MfG
Maik
P.S.
Sry aber ich komme aus der Automatisierungstechnik und dort ist die Programmierung mit Structurierten Text etwas anders. Bin grade dabei meine C++ Grundlagen zu vertiefen und mich dabei in Qt einzuarbeiten.
Leider sind die meisten Bücher zu Qt immer nur aus der sicht der Konsole geschrieben.
Also ich hab mir mal eine Signal Slotverbindung zusammen gebaut wie ich sie in einigen Büchern gefunden hab, nur leider funktioniert sie nicht 
hier der ausschnitt mit dem ich die Signal Slot verbindung aufbauen möchte.
MainWindow.cpp
MainWindow.h
Dialog.cpp
Dialog.h
hier der ausschnitt mit dem ich die Signal Slot verbindung aufbauen möchte.
MainWindow.cpp
Code: Alles auswählen
else
{
QDomNodeList domList = doc.elementsByTagName("Extract_FS_DS");
for(int i = 0; i < domList.length(); i++){
QDomElement domElement = domList.at(i).toElement();
QString Id = domElement.attribute ("Id");
QString ZeichNr = Id ;
connect(this,SIGNAL(ZeichNr(QString)),dialog,SLOT(SetZeichNr(QString)));}
dialog->exec();
}Code: Alles auswählen
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private:
Ui::MainWindow *ui;
Dialog *dialog;
public slots:
void ADD();
void OK();
signals:
void ZeichNr(QString Id);Code: Alles auswählen
void Dialog::SetZeichNr(QString IdN){
ui->lineEdit_2->setText(IdN);
}Code: Alles auswählen
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
protected:
void changeEvent(QEvent *e);
private:
Ui::Dialog *ui;
public slots:
void SetZeichNr(QString IdN);
};
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: