QDialog Text übergeben

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

QDialog Text übergeben

Beitrag von Strahlex »

Erstmal hallo und Frohe Weihnachten an alle!

Ich noch relativ neu in Qt, habe mich aber schon ein bisschen eingearbeitet, doch jetzt stehe ich an. :cry:

Ich will einen Text an meinen QDialog übergeben, der dann in einem LineEdit ausgegeben wird (eine Benutzernameneingabe).
Und zwar will ich den Dialog so aufrufen:

Code: Alles auswählen

ProxyDialog proxyDialog;
proxyDialog.setUser(user);
proxyDialog.setPass(pass);
proxyDialog.exec();
und im Dialog:

Code: Alles auswählen

void ProxyDialog::setUser(QString x)
{
    ui->edtUser->setText(x);
    user = x;
} 

void ProxyDialog::setPass(QString x)
{
    ui->edtPass->setText(x);
    pass = x;
}
Leider funktionier das setText() nicht (warscheinlich weil das LineEdit ja vor exec() noch nicht erstellt ist). Wie realisiere ich also mein Vorhaben am einfachsten? :?:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Funktioniert nicht, ist eine äußerst aufschlussreiche und hilfereiche Fehlermeldung...
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

upsala hat geschrieben:Funktioniert nicht, ist eine äußerst aufschlussreiche und hilfereiche Fehlermeldung...
Nur leider bekomm ich keine Fehlermeldung, beim Debuggen hängts immer beim setText()
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: QDialog Text übergeben

Beitrag von macman »

Strahlex hat geschrieben:Leider funktionier das setText() nicht (warscheinlich weil das LineEdit ja vor exec() noch nicht erstellt ist).
Wenn im Konstruktor deines ProxyDialog ein setupUi() drin steht, denn existiert das Lineedit auch. Ansonsten wüsste ich wirklich nicht, wo wir rumraten sollen.
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Re: QDialog Text übergeben

Beitrag von Strahlex »

macman hat geschrieben:
Strahlex hat geschrieben:Leider funktionier das setText() nicht (warscheinlich weil das LineEdit ja vor exec() noch nicht erstellt ist).
Wenn im Konstruktor deines ProxyDialog ein setupUi() drin steht, denn existiert das Lineedit auch. Ansonsten wüsste ich wirklich nicht, wo wir rumraten sollen.
Hmmm, also setupUi(this) steht drinnen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hmmm, also setupUi(this) steht drinnen.
Naja, wenn es genau so drinnen steht, dann wundert es mich nicht, wenn sich der Debugger beschwert...
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Was genau passt nicht?

Hier ist der Code:
proxydialog.h:

Code: Alles auswählen

#ifndef PROXYDIALOG_H
#define PROXYDIALOG_H

#include <QDialog>

#include "ui_proxydialog.h"

class ProxyDialog : public QDialog, private Ui::ProxyDialog
{
    Q_OBJECT

 public:
     QString getUser();
     QString getPass();
     bool getSavepass();
     ProxyDialog();
     void setUser(QString x);
     void setPass(QString x);

private:
    Ui::ProxyDialog *ui;
    QString user, pass;
     bool savepass;

private slots:
    void on_chbSavePass_toggled(bool checked);
    void on_edtUser_textChanged(QString x);
    void on_edtPass_textChanged(QString x);
};

#endif // PROXYDIALOG_H
proxydialog.cpp:

Code: Alles auswählen

#include "proxydialog.h"

ProxyDialog::ProxyDialog(){
    ui->setupUi(this);
}

void ProxyDialog::setUser(QString x)
{
    user = x;
    ui->edtUser->setText(user);
}

void ProxyDialog::setPass(QString x)
{
    pass = x;
    ui->edtPass->setText(pass);
}

QString ProxyDialog::getUser()
{
    return user;
}

QString ProxyDialog::getPass()
{
    return pass;
}

bool ProxyDialog::getSavepass()
{
    return savepass;
}

void ProxyDialog::on_edtUser_textChanged(QString x)
{
    user = x;
}

void ProxyDialog::on_edtPass_textChanged(QString x)
{
    pass = x;
}

void ProxyDialog::on_chbSavePass_toggled(bool checked)
{
    savepass = checked;
}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Entweder erbst du von Ui::ProxyDialog, oder du machst dir ein Member.
Beides kommt bissl doof...
Und warum nen Pointer auf ui?
Außerdem initialisierst du ui nicht... böse, das sollte eigentlich in nem segfault enden :/
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

franzf hat geschrieben:Entweder erbst du von Ui::ProxyDialog, oder du machst dir ein Member.
Beides kommt bissl doof...
Und warum nen Pointer auf ui?
Außerdem initialisierst du ui nicht... böse, das sollte eigentlich in nem segfault enden :/
Ok, ok, das mit dem erben hab ich nicht ganz kapiert. Was genau soll ich da machen?

Den Pointer auf ui mache ich weils der Qt Creator auch so macht, also der Gleichheit wegen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Strahlex hat geschrieben:Ok, ok, das mit dem erben hab ich nicht ganz kapiert. Was genau soll ich da machen?
class ProxyDialog : public QDialog, private Ui::ProxyDialog
In dieser Zeile deklarierst du die Klasse ProxyDialog, und lässt sie erben von QDialog und Ui::ProxyDialog.
Zweiteres ist überflüssig, wenn du eh einen Member des Typs Ui::ProxyDialog hast!
Den Pointer auf ui mache ich weils der Qt Creator auch so macht, also der Gleichheit wegen.
Ist aber eigentlich unsinnig.
Wenn du es machst, dann bitte initialisier den auch im Konstruktor von ProxyDialog, sonst hagelst SegFaults!!!

Code: Alles auswählen

ProxyDialog::ProxyDialog()
 : ui(new Ui::ProxyDialog)
{
    ui->setupUi(this);
}
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Wenn du es machst, dann bitte initialisier den auch im Konstruktor von ProxyDialog, sonst hagelst SegFaults!!!
Und im Destruktor auch wieder freigeben... sonst hagelt's MLKs...
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Danke, funzt super, genau so wie ich es wollte! :D
Antworten