Q_PROPERTY für eigenschaften von membern?

Alles rund um die Programmierung mit Qt
Antworten
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Q_PROPERTY für eigenschaften von membern?

Beitrag von -=Freaky=- »

hi,

ist es irgendwie möglich, die eigenschaften von membern einer klasse in dieser selbst als Q_PROPERTY verfügbar zu machen?
kleines beispiel, wie ich es u.a. probiert habe:

Code: Alles auswählen

class SettingsClass: public QObject
{
    Q_OBJECT

    Q_PROPERTY( int m_int READ getInt WRITE setInt )

    friend class MainWindow;

public:
    SettingsClass( QObject *parent = 0 )
	:QObject( parent )
    { /* ... */ }

    SettingsClass( const SettingsClass &p_other ){ /* ... */ }
    SettingsClass& operator=( const SettingsClass &p_other ){ /* ... */ }

    void setInt( const int p_int ){ m_int = p_int; }
    void setDouble( const double p_double ){ m_double = p_double; }
    void setString( const QString &p_string ){ m_string = p_string; }


    int getInt() const{ return m_int; }
    double getDouble() const{ return m_double; }
    QString getString() const{ return m_string; }


private:
    int m_int;
    double m_double;
    QString m_string;
};

Code: Alles auswählen

class MainWindow : public QMainWindow
{
    Q_OBJECT

    Q_PROPERTY( SettingsClass m_settings READ getSettings WRITE setSettings )
    
    Q_PROPERTY( int m_settings::m_int READ m_settings::getInt WRITE m_settings::setInt ) // und das hier klappt natuerlich nicht ganz

public:
    MainWindow(QWidget *parent = 0)
        :QMainWindow( parent )
    { /* ... */ }
    ~MainWindow(){ /* ... */ }

    SettingsClass& getSettings(){ return m_settings; }
    void setSettings( const SettingsClass &p_settings ){ m_settings = p_settings; }

private: // oder auch public, macht keinen unterschied
    SettingsClass m_settings;
};
das problem liegt also quasi in der 2. Q_PROPERTY-zeile in der MainWindow klasse ...
bisher konnte ich keine infos dazu finden, ob es auch so moeglich ist, oder nur direkte member der klasse als properties verfuegbar gemacht werden koennen ...
zur not muss ich mir eben was anderes ausdenken ...

kann mir da jemand weiterhelfen?
danke im voraus!

mfg,
julian
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Also eigentlich sollte das gehen, in dem du die Getter auch in MainWindow schreibst.
Wofür brauchst du das denn?
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

ja aus dem beispiel wird der sinn wohl nicht so klar ... ;)
ich habe halt eine klasse und diverse eigenschaften wurden in eine andere klasse ausgelagert, (die auch noch mit QVariants arbeitet, also gibt es genau 1 set und 1 get methode fuer alle settings darin ...).

diese settings, die ausgelagert wurden, sollen nun aber trotzdem als properties der "hauptklasse" verfügbar sein, obwohl sie eben ausgelagert sind.

zu deinem vorschlag:
das wuerde zwar evtl. funktionieren, aber wenn ich getter und/oder setter in MainWindow bzw. die jew. übergeordnete "hauptklasse" nehme, kann ich auch die paar variablen mit ruebernehmen und die uebersichtlichkeit durch die auslagerung ist hinfaellig ... und das ist leider gerade nicht sinn und zweck der aktion ...

ich weiss auch gar nicht, ob das ganze wirklich noetig ist, aber ich habe damit einige zeit rumprobiert und es interessiert mich wirklich, wie/ob sowas machbar ist ...

mfg,
julian
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Warum willst du denn dann überhaupt die Properties haben?
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

z.b. um in nem property dialog (im designer oder sonstwo) alles als properties d. "hauptklasse" zu haben, waere das nuetzlich.

mfg,
julian
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Du musst dann wohl zwangsläufig Getter und Setter ins Mainwindow packen. Der Vorteil der Auslagerung ist ja nicht weg: Du kannst ja immer noch die ganze Konfiguration austauschen.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

alles klar, danke fuer deine hilfe!
ja, der eine vorteil ist natuerlich, dass das alles einfach austauschbar ist.
der andere aber imho, dass die klasse etwas uebersichtlicher wird vom umfang an member-variablen und -methoden.

aber wie auch immer, dann wird das ganze wohl nicht anders loesbar sein ... was solls :)

mfg,
julian
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Die Methoden schaden doch nicht ud der Aufwand ist auch nicht hoch, kannst dir ja ein Makro schreiben, dass dir die Getter und Setter erzeugt.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

The User hat geschrieben:Die Methoden schaden doch nicht ud der Aufwand ist auch nicht hoch, kannst dir ja ein Makro schreiben, dass dir die Getter und Setter erzeugt.
hm, das ist wirkliche eine coole idee ... :D
das koennt ich ggf. probieren, ja.
danke fuer den tipp!
so unoffensichtlich isses nicht, aber selbst drauf gekommen waer ich so schnell auch nicht. :)

mfg,
julian
Antworten