2014-06-20 1 views
4

Je dois utiliser la fonction setPorperty pour définir la propriété dynamique sur l'objet.
Mais je veux dans un autre endroit pour vérifier si la propriété qui a été créée existe ou non.Comment vérifier si une propriété dynamique existe ou non

Ce que je fait:
Quand définissez la propriété:

QString fileDlg = QFileDialog::getOpenFileName(this, "Open File", "F://","Text Files(*.txt)"); 
QWidget *widget = new QWidget(this); 
QMdiSubWindow *mdiWindows = ui->mdiArea->addSubWindow(widget); 
mdiWindows->setProperty("filePath", fileDlg); 

Quand vérifier si la propriété existe:

QMdiSubWindow *activeWindow = ui->mdiArea->activeSubWindow(); 
if(activeWindow->property("filePath") == true){ 
    // code here 
} 

Répondre

5

Si la propriété n'existe pas, la méthode QObject::property retourne une variante non valide. C'est documented.

Ainsi:

QVariant filePath = activeWindow->property("filePath"); 
if (filePath.isValid()) { 
    ... 
} 

Side note: comparer quoi que ce soit à true est soit totalement superflu, ou un signe quelque part de la conception brisée. Vous ne devriez pas avoir ... == true ni ... == false n'importe où dans votre code.

+0

Je pense que votre chemin est plus simple et plus proche de mon code. –

+0

Eh bien, et comment faire une distinction entre propriété non définie et propriété définie sur 'QVariant()'? –

+0

Il n'y a pas besoin de les distinguer. Si vous pensez en avoir besoin, vous devez utiliser un type de données personnalisé et n'envelopper que dans la variante. –

1

Le problème est que vous essayez de vérifier la propriété QVariant directement, alors qu'il n'est même pas sûr si elle existe dans votre cas.

J'utiliserais personnellement l'une des solutions ci-dessous en fonction de votre contexte exact dans le programme réel.

Remplacez l'espace réservé variable par votre nom de propriété préféré si vous le souhaitez.

QVariant myPropertyValue = 
    ui->mdiArea->activeSubWindow()->property(myPropertyName); 
if(myPropertyValue.isValid()) 
    qDebug() << myPropertyName << "exists."; 

ou:

QList<QByteArray> dynamicPropertyNames = 
    ui->mdiArea->activeSubWindow()->dynamicPropertyNames(); 
if (dynamicPropertyNames.contains(myPropertyName)) 
    qDebug() << myPropertyName << "exists."; 
+0

Merci pour votre réponse. Je profite aussi de ton code. –

+0

@LionKing: sympa, en passant, je pensais à cela en faisant du vélo à la maison que vous pourriez probablement aussi interroger la propriété directement et voir si elle existe de cette façon. J'ai mis à jour la réponse. – lpapp

Questions connexes