C++ C++/创建spinbox小部件时的QT valueChanged(int)信号
我现在尝试创建一个简单的GUI openGL绘图程序 我使用Line2dFactory(Shape2dFactory的子类,它是QWidget的子类)类来接收各种输入小部件分配的值,然后将它们包装为Line2d(Shape2d的子类)对象,并将该对象发送到openGL小部件进行绘制 Line2dFactory类类似于: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
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的名称。