首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QSpinBox中设置特定值

在QSpinBox中设置特定值
EN

Stack Overflow用户
提问于 2013-11-29 15:56:27
回答 2查看 9.8K关注 0票数 6

我有一个包含QSpinBox的小部件。这个小部件还有一个QVector<int> Values。我想要做的是让Values显示来自 only的值。

起初,我认为在我的小部件中添加一个新的插槽和信号就可以做到这一点,比如

插槽:

代码语言:javascript
复制
void ChangeSomeValue()
{
    // QVector<int> Values;
    // int Index;
    int val = Values[ Index ];
    emit( SomeValueChanged( val ) );
}

连接:

代码语言:javascript
复制
connect( UI->MySpinBox, SIGNAL( valueChanged(int) ), this, SLOT( ChangeSomeValue() ) );
connect( this, SIGNAL( SomeValueChanged(int ) ), UI->MySpinBox, SLOT( setValue(int) ) );

但随后出现了几个问题:

  1. QSpinBox在我调用它的setValue之后会发出另一个valueChanged,从而产生一个无限循环(直到我的QVector爆炸)。
  2. 我仍然需要找到一种方法来跟踪索引,这取决于单击了哪些QSpinBox箭头(向上还是向下.我甚至认为这是不可能的)。

因此,我的解决方案,以及它的问题,似乎是一个死胡同。知道吗?如果可能的话,我想坚持使用QSpinBox

谢谢!

编辑

子类:

代码语言:javascript
复制
class SpinBox : public QSpinBox
{
    Q_OBJECT
public:
    explicit SpinBox(const QVector<int> & values, QWidget * parent = 0) :
        QSpinBox(parent),
        mValues(values),
        mIndex(0)
    {
        qSort(mValues);
        setMinimum(mValues.at(0));
        setMaximum(mValues.at(mValues.size() - 1));
        setValue(mValues.at(0));
    }

protected:
    void stepBy(int steps) // re-implementaion
    {
        mIndex += steps;
        mIndex = qBound(0, mIndex, mValues.size() - 1);
        setValue(mValues.at(mIndex));
    }

private:
    QVector<int>    mValues;
    int             mIndex;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-29 16:00:18

我建议写你自己的课来做它的子类QAbstractSpinBox。

也许可以看看这个问题的公认答案:How to subclass QSpinBox so it could have int64 values as maxium and minimum

票数 6
EN

Stack Overflow用户

发布于 2013-11-29 19:21:43

QSpinBox在我调用它的setValue之后会发出另一个valueChanged,从而产生一个无限循环(直到我的QVector爆炸)。

您可以通过使用QObject::blockSignals()来防止这种情况。之后一定要解除信号阻塞。

我仍然需要找到一种方法来跟踪索引,这取决于单击了哪些QSpinBox箭头(向上还是向下.我甚至认为这是不可能的)。

好的,我想您可以将旧值存储在一个成员变量中,当QSpinBox发出valueChanged()时,您可以将新值与旧值进行比较,以确定向上箭头还是向下箭头。

尽管如此,我不知道这是否足以使QSpinBox表现得像您想要的那样,在它被更改一次之后纠正它的值有点麻烦。子类QAbstractSpinbox确实可能更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20289468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档