我使用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
}
答案 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.";