QtDesigner Dynamische Eigenschaften

Alles zu Entwicklungsumgebungen und Editoren für Qt
Antworten
ThorstenK
Beiträge: 4
Registriert: 25. Januar 2012 10:10

QtDesigner Dynamische Eigenschaften

Beitrag von ThorstenK » 26. Januar 2012 09:42

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

archer
Beiträge: 306
Registriert: 2. Februar 2006 10:56

Re: QtDesigner Dynamische Eigenschaften

Beitrag von archer » 26. Januar 2012 11:17

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().

ThorstenK
Beiträge: 4
Registriert: 25. Januar 2012 10:10

Re: QtDesigner Dynamische Eigenschaften

Beitrag von ThorstenK » 26. Januar 2012 11:30

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

archer
Beiträge: 306
Registriert: 2. Februar 2006 10:56

Re: QtDesigner Dynamische Eigenschaften

Beitrag von archer » 26. Januar 2012 11:40

ich vergas das Objekt, sorry.

Code: Alles auswählen

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

ThorstenK
Beiträge: 4
Registriert: 25. Januar 2012 10:10

Re: QtDesigner Dynamische Eigenschaften

Beitrag von ThorstenK » 26. Januar 2012 11:44

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

archer
Beiträge: 306
Registriert: 2. Februar 2006 10:56

Re: QtDesigner Dynamische Eigenschaften

Beitrag von archer » 26. Januar 2012 11:54

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.

ThorstenK
Beiträge: 4
Registriert: 25. Januar 2012 10:10

Re: QtDesigner Dynamische Eigenschaften

Beitrag von ThorstenK » 26. Januar 2012 12:30

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

archer
Beiträge: 306
Registriert: 2. Februar 2006 10:56

Re: QtDesigner Dynamische Eigenschaften

Beitrag von archer » 26. Januar 2012 13:29

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.

solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: QtDesigner Dynamische Eigenschaften

Beitrag von solarix » 26. Januar 2012 20:48

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!

Antworten