fensterkommunikation

Alles rund um die Programmierung mit Qt
Antworten
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

fensterkommunikation

Beitrag von mine »

hallo!

ich bin recht neu hier und leider auch ein qt und c++ -looser... wenn ich also etwas dummes frage, liegt das nicht daran, dass ich das Handbuch nicht gelesen habe...

Ich bekomme es nicht hin eine variable an eine neue form zu übergeben und dann von dieser eine andere zurückzubekommen.

ich suche also nach dem int funktion(QString test) oder so in meinem neuen Fenster. kann mir da jemand helfen??

danke!
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Was hast Du denn schon ausprobiert?
Wo hängst Du?
Was genau funktioniert nicht?

Zeig mal ein Bisschen Code und man kann Dir helfen.
Linux, das längste Text-Adventure aller Zeiten
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

nein

Beitrag von mine »

nein, ich habe ein gaaaanz allgemeines problem: ich habe ein mainwindow.
jetzt erstelle ich eine neue fensterklasse, zum Beispiel irgendeinen dialog, der von Mainwindow aus aufgerufen wird.

bei c# finde ich jetzt eine funktion im neuen fenster, der ich eine variable übergeben und die dann etwas anderes returnen kann. bei qt finde ich nur irgendwelche konstruktoren, die mir nix sagen...

im mainwindow sollte irgendwas stehen wie

NeuesFenster f;

QString returnte_variable = f.show(übergebene variable)
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Du rufst show ohne Parameter auf. Richtest dir member Variablen in der neuen Klasse ein und setzt diese mit setVar(var).

Code: Alles auswählen

private:
   int var;
public:
    void setVar(int var);
Ok ich sehe wo es bei dir hängt. Du willst einen modalen Dialog mit Rückgabewert aufrufen. Das geht auch nicht mit show(), das machst du mit exec(). In diesem Falle setzt du deinen benötigten Variablen vor dem Aufruf.
exec gibt allerdings nur accept und reject zurück, welches du über Button oder ähnliches steuern kannst. Wenn dir das nicht genug ist, kannst du dir QDialog ableiten.
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

ahhhh

Beitrag von mine »

AH! Danke, das Prinzip habe ich jetzt verstanden - ich habe also das:

Code: Alles auswählen

void MainWindow::on_b_filter_clicked()
{
    filter f;
    f.setVar(datenbank);
    f.exec();
}
in meinem Hauptfenster, und in der Header vom Filter das:

Code: Alles auswählen

...
class filter : public QDialog {
    Q_OBJECT
    Q_DISABLE_COPY(filter)
public:
    explicit filter(QWidget *parent = 0);
    virtual ~filter();
    void setVar(QString datenbank);

protected:
    virtual void changeEvent(QEvent *e);

private:
    Ui::filter *m_ui;
    QString datenbank;
...
stehen. Leider bekomme ich jetzt noch eine Fehlermeldnung, nämlich:
undefinied reference to Filter::setVar(QString)

was mache ich da?
danke!
[/code][/quote]
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Na selbstverständlich musst du die Funktion setVar auch implementieren.
Also darin this->datenbank = datenbank;
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

Beitrag von mine »

habe ich:

Code: Alles auswählen

void setVar(QString datenbank)
{
   db = datenbank;
}
ich habe den private datenbank rausgeschmissen und QString db in filter.cpp global, also vor den Funktionen gesetzt... die undefi. reference bekomme ich aber trotzdem noch. hm...

danke übrigens für die Geduld! ich bin leider Physik-Student und soll so einen Bildverabeitungsfilter in eine GUI anbauen.
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

mine hat geschrieben:habe ich:

Code: Alles auswählen

void setVar(QString datenbank)
{
   db = datenbank;
}
Es muss aber so aussehen:

Code: Alles auswählen

void filter::setVar(QString datenbank)
{
   db = datenbank;
}
Sonst ist es nämlich keine Methoder der Klasse Filter.
Linux, das längste Text-Adventure aller Zeiten
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

Beitrag von mine »

JUJU! danke, es funktioniert!
mine
Beiträge: 40
Registriert: 17. März 2009 09:44

Beitrag von mine »

jetzt doch nochmal in die andere richtung: mein "dialog" ist relativ aufwendig und ich muss einige variablen zurückgeben - dazu scheint qdialog nicht geeignet? wie würdet ihr das tun?

danke!
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Code: Alles auswählen

QString filter::getVar()
{
   return db;
} 

int bla()
{
   QString bla = dialog->getVar();
}

Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Du kannst die set Prozeduren auch gleich in die Headerdatei schreiben, das ist auf Dauer übersichtlicher.

Code: Alles auswählen

public:
    int var() const {return myVar;}
    void setVar(const int x) {myVar = x;}

private:
    int myVar;
Antworten