如何检查是否存在动态属性

时间:2014-06-20 12:18:50

标签: c++ qt qt5 qtcore qobject

我使用setProperty函数将动态属性设置为object 但我想在其他地方检查创建的属性是否存在。

我做了什么:
设置属性时:

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);

检查属性是否存在时

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

2 个答案:

答案 0 :(得分:7)

如果属性不存在,QObject::property方法将返回无效的变体。这是documented

因此:

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

旁注:将任何内容与true进行比较要么完全是多余的,要么是某处设计损坏的迹象。您的代码中不应该有... == true... == false

答案 1 :(得分:1)

问题是你试图直接检查QVariant属性,而它甚至不确定它是否存在于你的情况下。

我会亲自使用以下任一解决方案,具体取决于您在实际计划中的确切背景。

如果您愿意,请使用您首选的属性名称替换变量占位符。

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

或:

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