Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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++ Qt向插槽传递参数时出现问题_C++_Qt_Qt4_Signals Slots - Fatal编程技术网

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()));