Seite 1 von 1

QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 08:42
von ThorstenK
Hallo,

ich habe im Designer ein QWidget mit der per 'Dynamische Eigenschaft hizufügen'
hinzugefügten eigenschaft 'fld_direction' als Integer mit dem wert '1'.

Im code versuche ich nun die Eigenschaft auszulesen...

Code: Alles auswählen

fld_normal::fld_normal(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::fld_normal)
{
    ui->setupUi(this);
    qDebug() << property("fld_direction");
    qDebug() << QObject::dynamicPropertyNames();
}
gibt leider weder/noch etwas aus.
Wie komme ich an diese Eigenschaft ?

Mit freundlichem Gruß
Thorsten

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 10:17
von archer
Ich würde es mit versuchen mit

Code: Alles auswählen

qDebug() << ui->property("fld_direction").toInt();
Ansonsten Doku, property() liefert ein QVaraint. Deshalb das toInt().

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 10:30
von ThorstenK
Hallo archer,

'ui' hat kein 'property' und ein

Code: Alles auswählen

qDebug() << QVariant( (int) 1 );
gibt wie zu erwarten QVariant(int, 1) aus.

Im übrigen gibt

Code: Alles auswählen

qDebug() << property("fld_direction").toInt();
qDebug() << property("fld_direction").isValid();
0 und false aus.
Die Eigenschaft wird also so nicht gefunden.

Danke und Gruß
Thorsten

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 10:40
von archer
ich vergas das Objekt, sorry.

Code: Alles auswählen

qDebug() << ui->myWidget->property("fld_direction").toInt();

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 10:44
von ThorstenK
SOLVED

Die Eigenschaft wird richtig gefunden und angezeigt.
Hatte Sie dem Platzhalter im Hauptfenster zugeordnet.

Eine Frage noch dazu, git es einen vergleichbaren weg
um einem Widget eine Eigenschaft über seine Platzhalter mitzugeben ?

Danke
Thorsten

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 10:54
von archer
Einfach in deinem Quellcode:
Beispiel

Code: Alles auswählen

myWidget->setProperty("Test", true);
Wenn Test nicht da ist, wird es hinzugefügt mit dem Wert true.
Ansonsten wird der vorhandene Wert ersetzt.

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 11:30
von ThorstenK
Um nicht missverstanden zu werden..

Ich habe ein QWidget nebst Klasse als 'fld_normal.ui'.
Ein MainWindow als 'mainwindow.ui' in dem diversen
Widgets via 'Als Platzhalter für benutzerdefinierte ...' das
'fld_normal' zugewiesen wurde.

Die dynamische eigenschaft in 'fld_normal.ui' wird sauber
angezeigt, daher das SOLVED, eigenschaften der Platzhalter
aber nicht.

Die Frage ist nun, kann ich diesen 'Platzhaltern' eigenschaften
zuweisen die vergleichbar funktionieren ?.

Gruß
Thorsten

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 12:29
von archer
Lege die Properties (dynamischen Eigenschaften) der Platzhalter nicht im Designer an sondern in deinem Quellcode.

Code: Alles auswählen

ui->setupUi(this);
ui->myPlaceHolder1->setProperty("PLaceTest", QString("1"));
ui->myPlaceHolder2->setProperty("PLaceTest", QString("5"));
Du kannst diese auch z.B. im Konstruktor deiner Widgets anlegen

Code: Alles auswählen

CWidgetForPlaceHolder1::CWidgetForPlaceHolder1()
{
    ...
    setProperty("PLaceTest", QString("1"));
}
Und zurücklesen

Code: Alles auswählen

ui->myPlaceHolder1->property("PLaceTest").toString();
ui->myPlaceHolder2->property("PLaceTest").toString();
bzw.

Code: Alles auswählen

property("PLaceTest").toString();
innerhalb von CWidgetForPlaceHolder1.

Re: QtDesigner Dynamische Eigenschaften

Verfasst: 26. Januar 2012 19:48
von solarix
ThorstenK hat geschrieben: Die Frage ist nun, kann ich diesen 'Platzhaltern' eigenschaften
zuweisen die vergleichbar funktionieren ?.
"Dynamische Eigenschaften" sind eine Funktion der Klasse "QObject"... mit anderen Worten: es ist egal, was es für ein Widget ist.. ist es ein QObject (und das sind alle QWidgets), kann es auch dynamische Eigenschaften besitzen. Platzhalter hin oder her..

Lange Rede kurzer Sinn: Warum probierst du es nicht einfach? Ich vermute: das klappt..

hth!