在QSpinBox中设置特定值

 ENE的蓝白胖次 发布于 2023-02-13 18:55

我有一个包含a的小部件QSpinBox.这个小部件也有一个QVector Values.我想这样做是让QSpinBox显示发出值Values.

起初我认为我的小部件中的新插槽和信号可以实现这一点,例如

插槽:

void ChangeSomeValue()
{
    // QVector Values;
    // int Index;
    int val = Values[ Index ];
    emit( SomeValueChanged( val ) );
}

连接:

connect( UI->MySpinBox, SIGNAL( valueChanged(int) ), this, SLOT( ChangeSomeValue() ) );
connect( this, SIGNAL( SomeValueChanged(int ) ), UI->MySpinBox, SLOT( setValue(int) ) );

但随后出现了几个问题:

    QSpinBoxvalueChanged在我调用它的setValue之后发出另一个,导致无限循环(直到我的QVector爆炸).

    我仍然需要找到一种跟踪索引的方法,具体取决于QSpinBox点击的箭头(向上或向下......我甚至认为这不可能).

所以我的解决方案及其问题似乎是一个死胡同.任何的想法?.QSpinBox如果可能的话,我想坚持下去.

谢谢 !

[编辑]

子类:

class SpinBox : public QSpinBox
{
    Q_OBJECT
public:
    explicit SpinBox(const QVector & 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    mValues;
    int             mIndex;
};

Pete.. 6

我建议通过对QAbstractSpinBox进行子类化来编写自己的类.

也许看看这个问题上接受的答案: 如何子类化QSpinBox,使其可以将int64值作为最大值和最小值

1 个回答
  • 我建议通过对QAbstractSpinBox进行子类化来编写自己的类.

    也许看看这个问题上接受的答案: 如何子类化QSpinBox,使其可以将int64值作为最大值和最小值

    2023-02-13 18:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有