2011-06-24 27 views
0

我正在使用QtPropertyBrowser作为QSqlTableModel的前端。所以表中的每个字段在浏览器中都有自己的属性。它允许用户编辑数据库中的字段值。但是,如果DB中的值为NULL,则该属性根本不显示。我试过类似的东西QtPropertyBrowser中的空白值

item->setValue(QVariant()); 

但它会导致段错误。

whith字符串字段没有问题:如果它是NULL,我只需插入QString(“”),属性浏览器中的值字段变为空白。但是我能用数字数据类型做什么?

谢谢。

+0

你好,你有没有找到这方面的解决方案?我面临同样的问题;-( –

+0

@ ludek-vodicka;我的同事通过以下方式修改QtProperty框架的源代码解决了这个问题:如果一个属性是可为空的,他会创建一个带有“NULL”复选框的特殊编辑器。如果用户设置了它 - 该属性将被禁用 – typbl4

+0

感谢您的回复。我还需要为我的目的重新实现QtPropertBrowser框架的一部分,因此扩展为NULL复选框是可能的,也是个好主意。谢谢。 –

回答

0

documentation指出QVariant::QVariant()构造一个无效的变体。我只会给它QVariant(0),而这可以转换为大多数其他类型。

+0

感谢您的回答。但有一些不明确的地方:用户不能理解“0”是指NULL还是它之前设置的具体值。 – typbl4

+0

顺便提一句,我在item-> setValue(QVariant(0))上有段错误;即使在整数域。 – typbl4

+0

只是一个很快的猜测,自从我上次使用属性编辑器以来已经有一段时间了,正如@OrcunC指出的那样,一个无效的变体似乎完全不是无效的:)没有havi在访问你的代码的过程中,我仍然猜测,你的指针对项目是无效的。你当然可以使用你的调试器进入属性编辑器;因为它来自QtSolutions,应该可以使用源代码(恐怕不是供应商提供的代码之前;)) –

0

我会根据QT文档对进行猜测

如果您的值为NULL,您可以创建属性,就好像它是一个组,如下所示,但这不会让您编辑它。如果没有,那么就像你一样创建一个属性,并像往常一样设置它的值。

//Create a property 
QtVariantProperty *nullType = variantManager->addProperty(
     QtVariantPropertyManager::groupTypeId(), "Your property name"); 

groupTypeId似乎允许QVariant ::无效。

+0

谢谢,但我必须提供可编辑的字段。 – typbl4