Seite 1 von 1

QString an QMainWindow übergeben

Verfasst: 9. August 2011 12:27
von Cascoin
Hallo,
ich habe eine kleine Frage die wohl ziemlich leicht zu lösen ist.
Also ich möchte einer Instanz einer Klasse (-> der Klasse QMainWindow) einen String übergeben.
Bei "normalen" Funktionen klappt das auch, nur habe ich Probleme bei der
QMainWindow. Was mache ich falsch?

Ich poste hier mal wie ich das mir vorgestellt hätte:
MainWindow.h

Code: Alles auswählen

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0, QString *g);
    ~MainWindow();
};

#endif // MAINWINDOW_H

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent, QString *g)
    : QMainWindow(parent)
{
}

Code: Alles auswählen

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString G;
    MainWindow w(G);
    w.show();

    return a.exec();
}
Also wie gesagt. Anderen Klassen kann ich QString oder anderes übergeben aber in dem speziellen Fall funktionierts net.
Könnte mir da jemand einen Tipp geben?
Danke Cascoin

Re: QString an QMainWindow übergeben

Verfasst: 9. August 2011 12:30
von franzf
Default-Parameter müssen IMMER nach den normalen Parametern stehen. Gilt für alle Funktionen,und damit auch Konstruktoren.
-> C++-Grundlagen.

Re: QString an QMainWindow übergeben

Verfasst: 9. August 2011 12:44
von Cascoin
Danke für den Tipp, aber daran alleine kanns nicht liegen... Kommt immer noch eine Fehlermeldung und ich versteh net was da steht
Wo ist noch der Wurm begraben?

mainwindow.h

Code: Alles auswählen

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QString *g, QWidget *parent = 0);
    ~MainWindow();
};
mainwindow.cpp

Code: Alles auswählen

MainWindow::MainWindow(QString *g, QWidget *parent)
    : QMainWindow(parent)
{
}
main.cpp

Code: Alles auswählen

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QString G = "aergaserg";
    MainWindow w(G);
    //w.show();

    return a.exec();
}

Könnte mir da jemand weiterhelfen?

Re: QString an QMainWindow übergeben

Verfasst: 9. August 2011 12:47
von franzf
Das passt nicht zusammen:

Code: Alles auswählen

MainWindow(QString *g, QWidget *parent = 0);

Code: Alles auswählen

QString G = "aergaserg";
MainWindow w(G);
In Zukunft bitte immer die Fehlermeldung mitliefern, die der Compiler ausspuckt. Hier ist es noch recht übersichtlich, wenns aber mal mehr Code wird, ist das mit dem Fehler erkennen nicht mehr so leicht,

Re: QString an QMainWindow übergeben

Verfasst: 9. August 2011 12:56
von Cascoin
Danke nochmal für die Hilfe.
Naja, das QString G hat ja nichts damit zu tun wie ich den Parameter innerhalb der MainWindow-Instanz nenne.
Also ich hab das schon bewußt einmal groß, das andere mal klein geschrieben.


Jetzt hab ich grad noch ein wenig rumprobiert....

Code: Alles auswählen

MainWindow w(&G);
So funktionierts, aber ist das auch sauber so?

Re: QString an QMainWindow übergeben

Verfasst: 9. August 2011 13:27
von franzf
Es kommt drauf an. Ein nicht-konstanter Zeiger deutet darauf hin, dass innerhalb des Konstruktors dieser Zeiger verändert wird. Konstanter Zeiger sagt "ich kann auch NULL sein!". Alles andere wird per value oder const-Referenz übergeben.
Wenn du über die Lebenszeit deines Objektes diesen String speichern willst, muss du dir auch über die Lebenszeit des Strings gedanken machen. Das Objekt, auf das der Zeiger zeigt, muss dein MainWindow-Objekt überleben. Tut es in deinem Beispiel auch, trotzdem ist es weder schön noch fehlerunanfällig - sich auf ein ganz bestimmtes Verhalten und eine definierte Verwendung verlassen ist ein wunderbarer Auslöser für Fehler, die man dann nur ganz schwer findet ;)

Re: QString an QMainWindow übergeben

Verfasst: 10. August 2011 19:21
von Cascoin
Ok, vielen Dank. Jetzt paßt alles...
(leider weiß ich nicht wie ich dieses thema als (gelöst) markieren kann....
mfg Cascoin

Re: QString an QMainWindow übergeben

Verfasst: 10. August 2011 20:17
von franzf
Indem du bei deinem ersten Post auf edit gehst und den Titel bearbeitest ;)