QObject::connect: signal not found in QThread
时间: 2023-07-15 19:15:06 浏览: 414
这个错误通常是因为在`QThread`的子类中没有声明与信号连接的函数的原因。您需要在`QThread`的子类中声明该信号和槽函数,并在连接信号和槽时使用正确的函数名称。
例如,如果您在`QThread`的子类中有一个名为`mySignal`的信号,您需要声明一个名为`onMySignal`的槽函数,如下所示:
```
class MyThread : public QThread
{
Q_OBJECT
signals:
void mySignal();
private slots:
void onMySignal();
};
```
然后,您可以将信号与槽函数连接起来:
```
MyThread* thread = new MyThread();
connect(thread, SIGNAL(mySignal()), thread, SLOT(onMySignal()));
```
请注意,这里的函数名称应该是`onMySignal`,而不是`MyThread::onMySignal`,因为在这种情况下,槽函数是在`QThread`的上下文中执行的,而不是在`MyThread`的上下文中执行的。
相关问题
QObject::connect: signal not found in RouteEvent
这个错误提示是因为在connect函数中,你连接了一个不存在的信号。可能是因为你在RouteEvent类中没有定义close信号,导致连接失败。在Qt中,QWidget类中有一个close信号,它表示窗口被关闭的信号。所以,如果你希望在RouteEvent窗口关闭的时候执行一些操作,可以考虑连接QWidget的close信号,像下面这样:
```
connect(route_event, &QWidget::closeEvent, this, [=]() {
enableAllItems(m_tree_map->m_map_project);
});
```
这样,当RouteEvent窗口关闭的时候,会触发QWidget的closeEvent事件,从而执行lambda函数中的代码,恢复MyTreeWidget中所有Item的可用状态。需要注意的是,这种方式只适用于继承自QWidget的类,如果你的类继承自其他类,可能需要连接其他信号来实现相应的功能。
QObject::connect: signal not found in QPushButton
当在QObject(如QPushButton)上使用`QObject::connect()`函数时,如果报出`signal not found in QPushButton`这样的错误,意味着你在尝试连接一个信号(Signal)到一个槽(Slot),但是找不到所指定的信号。在QPushbutton中,常见的信号通常是`clicked()`或`pressed()`,用于响应按钮点击事件。
例如:
```cpp
QPushButton *button = new QPushButton("Click me");
QObject::connect(button, &QPushButton::clicked, this, [this]() { /* Slot function */ });
```
在这个例子中,`&QPushButton::clicked`是信号,`this->slotFunction()`是槽函数。如果误写成了`&QPushButton::nonExistentSignal`,就会导致找不到信号的错误。
检查以下几个方面:
1. 确保信号名拼写无误,包括大小写和是否有特殊的命名约定(如Qt中的`clicked()`而不是`click()`)。
2. 检查信号是否正确地与槽函数关联,特别是当使用lambda表达式作为槽函数时,需要确保指针传递正确。
3. 如果信号是在派生自QPushButton的自定义类中新增的,确保在`#include`中包含了相应的头文件。
如果以上都确认无误,可能是信号未正确注册或实现了,或者是在构造函数中没有使用`QObject::connect()`连接信号。如果信号不是由QObject派生类提供的,可能需要在适当的位置创建并发射这个信号。
阅读全文