QObject::connect:无此信号
QObject::connect: No such signal
我需要知道我做错了什么。
我试着研究了一下,但我找不到任何与我的案子有关的东西。我是QT的新手,调试信号和插槽对我来说有点技术。
我想做的很简单:创建一个线程,它将不断地向我的QProgressBar
小部件发送信号。
下面是我的基本代码片段:
thread.h
class MyThread : public QThread
{
public:
MyThread(QWidget * parent = 0);
signals:
void valueChanged(int value);
protected:
void run();
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyThread * test = new MyThread(this);
connect(test,SIGNAL(valueChanged(int)),ui->progressBar,SLOT(setValue(int)));
test->start();
}
thread.cpp
MyThread::MyThread(QWidget * parent)
{
}
void MyThread::run(){
emit valueChanged(10); //for simplicity
}
void MyThread::valueChanged(int value){
}
我的UI上只有一个progressBar
,我的main
与默认值相同。
无论如何,在运行代码时。我一直从我的线程类得到这个no such signal
。我能知道我做错了什么吗?我也想用我自己的话澄清一下我对signals and slots
的理解是否正确:这意味着每次调用signal
时都会触发slot
。
我认为错误消息是由于MyThread
声明顶部缺少Q_OBJECT
宏。http://doc.qt.io/qt-5/signalsandslots.html上的文档解释了这对于任何想要声明信号和槽的类都是必要的。
将类定义更改为:
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(QWidget * parent = 0);
signals:
void valueChanged(int value);
protected:
void run();
};
请查看链接的文档,特别是 a Small Example一节,以获得所需的完整解释。
不能在.cpp文件中实现信号。MOC会做到这一点,而且必须只有一个实现。
删掉这部分:
void MyThread::valueChanged(int value){
}
如果你的代码可以工作,那可能是运气,因为链接器丢弃了正确的实现。
相关文章:
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 当我使用Connect信号和插槽时,会出现此分解错误
- 可以在 QObject::connect() C++中连接 QML 对象现有信号?
- Qt connect(*发送器,*信号,*接收器,*方法)不调用插槽
- QObject::connect:未找到信号
- connect() 似乎用错误的命名空间作为信号的前缀
- Q对象::connect:没有这样的信号(类名)(signalname)(atribure)
- QObject::connect:没有这样的信号progressbarV::keyReleaseEvent()
- QObject::connect:在 c++ Qt 5.3 中连接 qml 信号时没有这样的信号
- QObject::connect:没有这样的信号mouseReleaseEvent
- 使用QObject::connect()时,类型签名是否重要,用于将函数连接到信号
- QObject::connect:无此信号