C++/QT 值创建旋转框小部件时更改(整数)信号

C++/QT valueChanged(int) signal when spinbox widget being created

本文关键字:整数 信号 小部 QT 创建 旋转 C++      更新时间:2023-10-16

我现在正在尝试创建一个简单的GUI openGL绘图程序。

我使用 Line2dFactory(Shape2dFactory 的子类,它是 QWidget 的子类)类来接收各种输入小部件分配的值,然后将它们包装为 Line2d(Shape2d 的子类)对象并将对象发送到 openGL 小部件进行绘制。

Line2dFactory 类如下所示:

class Line2dFactory : public Shape2dFacotry
{
    Q_OBJECT
public:
    explicit Line2dFactory(QWidget *parent = 0);
    ~Line2dFactory();
signals:
    // this is a member of Shape2dFacotory. for the purpose of
    // illustration I put it here
    void shape2dSent(Shape2d shape);
public slots:
    // set begin and end points
    void setX1(int i);
    void setY1(int i);
    void setX2(int i);
    void setY2(int i);
    // implement object creation, and emit the created object to display
    void sendLine2d();
private:
    int x1, y1, x2, y2;
    Line2d line2d;
};

我将设置**(int)插槽连接到4个QSpinBox的ValueChanged(int)信号。按钮的点击()信号连接到sendLine2d()插槽。

程序启动后,如果我通过GUI更改QSpinBox中的所有值并单击按钮,则会创建一个对象并发送以显示。

但是,如果我不更改旋转框中的所有值(默认值为 0),则这些未更改的旋转框的信号似乎没有发送。因此,相应点的初始值是随机的int。如果单击按钮,则程序将冻结计算机,因为它尝试计算可能很长的行。

我的问题是:我可以将 set** 插槽连接到什么信号以使工厂类知道 Qspinbox 的初始值?而且,更一般地说,对于其他 gui 组件?

我不想手动分配值,因为如果我决定更改默认值,我可能会忘记更改两者。

您可以在构造函数中初始化值

Line2dFactory(int p_x1, int p_x2, int p_x3, int p_x4, QWidget *parent = 0):
       x1(p_x1),
       x2(p_x2),
       x3(p_x3),
       x4(p_x4)
{
}

然后用你的旋转盒

QSpinBox sb1;
QSpinBox sb2;
QSpinBox sb3;
QSpinBox sb4;
Line2DFactor factory(sb1.value(), sb2.value(), sb3.value(), sb4.value());

或者相反,使用工厂提供的值初始化旋转框

QSpinBox sb1;
sb1.setValue(factory.getX1());

valueChanged(int) 只有当值已更改并且与旧信号不同时,QSpinBox才会发送信号。AFAIK 您可以显式调用sb1.valueChanged(sb1.value())它应该触发所有连接的插槽,但在构造函数中初始化 Line2DFactory IMO 更好、更干净。