C++ Qt向插槽传递参数时出现问题
我似乎不能把一个论点传给别人。如果我不传递参数,函数将正常运行。如果我传递一个参数(整数),编译时会出现错误“没有这样的名称类型”和“没有这样的插槽” 在我的标题中,我声明:C++ Qt向插槽传递参数时出现问题,c++,qt,qt4,signals-slots,C++,Qt,Qt4,Signals Slots,我似乎不能把一个论点传给别人。如果我不传递参数,函数将正常运行。如果我传递一个参数(整数),编译时会出现错误“没有这样的名称类型”和“没有这样的插槽” 在我的标题中,我声明: private slots: void addButton(int); signals: void clicked(int) 在my Main.cpp中,我执行以下操作: int count; int count = 0; QPushButton* button = new QPushButton("Button");
private slots:
void addButton(int);
signals:
void clicked(int)
在my Main.cpp中,我执行以下操作:
int count;
int count = 0;
QPushButton* button = new QPushButton("Button");
_layout->addWidget(button);
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count)));
信号和插槽必须具有相同数量和类型的参数,并且您只能将信号的参数传递给插槽,而不能传递任何您想要的变量或值。Sebastian是正确的,您不能以尝试的方式执行此操作,但是Qt确实提供了一个类,为您提供了所需的功能
看看这本书。它允许您将整数与对象/信号对相关联。然后连接到它的信号,而不是直接连接到按钮。我发现这有三个问题 首先,
clicked()
信号由QPushButton
发出(没有参数),但您正试图在自己的类中重新定义它(使用int
参数)。如果要执行此操作,请执行以下操作:
SignalClass* objectWithSignals = new SignalClass;
SlotClass* objectWithSlots = new SlotClass;
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b()));
然后,您只能连接到SignalClass
中已定义的信号。换句话说,信号a()
必须属于SignalClass
,而不是SlotClass
(实际上,clicked()
是在QPushButton
的基类中定义的。)
其次,在connect()
函数中,需要使用参数类型指定信号和插槽签名。如果在connect()
函数中有count
,则它应该是int
第三,您的连接调用中缺少一个括号:信号(单击(计数))
希望能有所帮助。编辑了上面的代码以反映我的尝试(基于我找到的一个示例),但仍然不起作用。clicked()-信号是由button类定义的,您无法更改它(除非您编写自己的button类并这样做,但我怀疑这是否是解决您在此处尝试执行的任何操作的解决方案)。我很惊讶,您的答案是唯一提到参数错误的答案,其中变量的名称被传递到连接调用中的信号和插槽;除非“count”是一个类型,否则示例代码永远不会编译。
SignalClass* objectWithSignals = new SignalClass;
SlotClass* objectWithSlots = new SlotClass;
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b()));