我有一个使用QDataWidgetMapper在一组小部件中显示的模型。一个这样的字段是由QStringList选项填充的QComboBox,但映射似乎不起作用。
QComboBox的用户属性是currentText()函数,它没有相应的setCurrentText()函数用于写入,因此映射失败并显示警告Warning: QComboBox::setProperty: Property "currentText" invalid, read-only or does not exist
。
因此,我创建了一个简单的自定义QComboBox,如下所示:
class MappingComboBox : public QComboBox
{
Q_OBJECT
public:
Q_PROPERTY(QString mappingText READ currentText WRITE setCurrentText USER true)
explicit MappingComboBox(QWidget *parent = 0) : QComboBox(parent) {}
QString currentText() const { return QComboBox::currentText(); }
public slots:
void setCurrentText(const QString& s) { setCurrentIndex(findText(s); }
};
但我仍然得到相同的映射错误Warning: QComboBox::setProperty: Property "currentText" invalid, read-only or does not exist
。我非常确定我已经将我的小部件提升为MappingComboBoxes,但QDataWidgetMapper似乎仍然使用默认的只读用户属性currentText
而不是可写的自定义用户属性mappingText
。
我错过了什么吗?你能否覆盖继承类的用户属性?
编辑:我认识到这个问题已在Qt 5.3.1中得到修复,但我暂时停留在Qt 4中,所以我试图想出一个不涉及编辑源代码的解决方法。