【发布时间】:2018-11-08 16:41:21
【问题描述】:
这几天我一直在寻找解决方案。情况如下:
我有一个自定义滑块类,它有两个句柄来控制一系列双打,我为此创建了四个属性:
Q_PROPERTY(double minimum MEMBER mMinimum NOTIFY minimumChanged USER true)
Q_PROPERTY(double maximum MEMBER mMaximum NOTIFY maximumChanged USER true)
Q_PROPERTY(double lowerValue MEMBER mLowerValue NOTIFY lowerValueChanged USER true)
Q_PROPERTY(double upperValue MEMBER mUpperValue NOTIFY upperValueChanged USER true)
我将这些属性绑定到 QDataWidgetMapper:
settingsMapper->addMapping(ui->cutLevelSlider, settings.indexOf("lowerCutLevel"), "lowerValue");
settingsMapper->addMapping(ui->cutLevelSlider, settings.indexOf("upperCutLevel"), "upperValue");
settingsMapper->addMapping(ui->cutLevelSlider, settings.indexOf("minValue"), "minimumValue");
settingsMapper->addMapping(ui->cutLevelSlider, settings.indexOf("maxValue"), "maximumValue")
settingsMapper->toFirst();
,希望我可以在滑块和settings 项目模型之间进行两种更新,该模型管理设置值的单一真实性。换句话说,我正在尝试使用滑块cutLevelSlider 作为模型settings 中存储的最小、最大、下限、上限4 个值的视图。
但它不起作用。当我滑动滑块时,只有滑块的最后一个属性(upperValue)会更新到模型中,其他所有属性都不会改变。当我通过另一个小部件更改模型时(例如,从 tableview 编辑),滑块状态不会相应更改。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
(假设
ui->cutLevelSlider是一个QSlider)是否有理由不将滑块的valueChanged信号连接到任意槽,然后通过这些槽修改你的四个变量的值? -
这个想法是,这些值不仅可以由这个滑块查看/控制,还可以由其他小部件查看/控制。我希望有 2 路绑定,即当值被编辑框更改时,我希望看到滑块也相应地更改。据我所知,这正是 QDataWidgetMapper 的目的,但不幸的是,它甚至不适用于自定义小部件或非编辑小部件。
-
这个有什么更新吗?还在寻找将多个字段映射到同一个小部件的多个 Qt 属性的解决方案。任何解决方法也将不胜感激。
-
我来到了同样的话题 :) 但是如果你正在做自定义小部件,为什么不包括 QDataWidgetMappers 作为它的私有成员?即使您想控制模型中的字段名称,您也可以创建一些 Bind(fieldname1, fieldname2, ...) 方法,该方法将采用字段名称并在自定义 widger 中处理正确的绑定。不确定这个想法有多好,但我没有其他想法,我会尝试一下。
标签: c++ qt model-view-controller qwidget