QString an QMainWindow übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

QString an QMainWindow übergeben

Beitrag 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
Zuletzt geändert von Cascoin am 9. August 2011 12:31, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QString an QMainWindow übergeben

Beitrag von franzf »

Default-Parameter müssen IMMER nach den normalen Parametern stehen. Gilt für alle Funktionen,und damit auch Konstruktoren.
-> C++-Grundlagen.
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

Re: QString an QMainWindow übergeben

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QString an QMainWindow übergeben

Beitrag 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,
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

Re: QString an QMainWindow übergeben

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QString an QMainWindow übergeben

Beitrag 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 ;)
Cascoin
Beiträge: 20
Registriert: 28. September 2010 17:32

Re: QString an QMainWindow übergeben

Beitrag von Cascoin »

Ok, vielen Dank. Jetzt paßt alles...
(leider weiß ich nicht wie ich dieses thema als (gelöst) markieren kann....
mfg Cascoin
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QString an QMainWindow übergeben

Beitrag von franzf »

Indem du bei deinem ersten Post auf edit gehst und den Titel bearbeitest ;)
Antworten