Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++/创建spinbox小部件时的QT valueChanged(int)信号_C++_Qt_User Interface - Fatal编程技术网

C++ C++/创建spinbox小部件时的QT valueChanged(int)信号

C++ C++/创建spinbox小部件时的QT valueChanged(int)信号,c++,qt,user-interface,C++,Qt,User Interface,我现在尝试创建一个简单的GUI openGL绘图程序 我使用Line2dFactory(Shape2dFactory的子类,它是QWidget的子类)类来接收各种输入小部件分配的值,然后将它们包装为Line2d(Shape2d的子类)对象,并将该对象发送到openGL小部件进行绘制 Line2dFactory类类似于: class Line2dFactory : public Shape2dFacotry { Q_OBJECT public: explicit Line2dFac

我现在尝试创建一个简单的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;
};
我将set**(int)插槽连接到4个QSpinbox的值更改(int)信号。 按钮的clicked()信号连接到sendLine2d()插槽

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

但是,如果我没有更改旋转框中的所有值(默认值为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
发送信号。好的,您可以显式调用
sb1.valueChanged(sb1.value())
,它会触发所有连接的插槽,但是在构造函数中初始化
Line2DFactory
会更好更干净。

谢谢您的回答。无论哪种方式,我都需要访问为同步值而创建的QSpinBox实例。因为我正在使用QT设计器创建*.ui xml文件并生成与ui相关的代码,所以如何将值设置为spinbox?@user1824372 ui->nameofspinbox->setValue(x);ui->name of spinbox->value();NameOfSpinBox是Qt设计器中spinbox的名称。