0

我有一个模型正在使用 QDataWidgetMapper 显示在一组小部件中。一个这样的字段是由选项 QStringList 填充的 QComboBox,但映射似乎不起作用。

QComboBox 的 user 属性是 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 中,所以我试图想出一个不涉及编辑源代码的解决方法。

4

0 回答 0