Qt v4.8.0,VC2010编译器
我有一个基于QMainWindow
的课程,我正在尝试向其发送涉及QUuid
的信号
但是,每次运行它都会出现错误:
Object::connect: No such slot MainWindow::on_comp_connected(QUuid) in ..\..\src\mainwindow.cpp:143
Object::connect: (receiver name: 'MainWindow')
由于插槽肯定存在(它在moc _中),这让我变得便利了
class MainWindow : public QMainWindow
{
Q_OBJECT
// SNIP private typedefs
public:
MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
~MainWindow();
// SNIP public methods
signals:
void testSendQuuid(const QUuid &qcid);
public slots:
void on_comp_connected(const QUuid &qcid);
private:
// SNIP private parts
QOpenAcnController *acnInt; // This is where the signal comes from
};
在MainWindow
构造函数的末尾(提到的第143行)我有:
connect(acnInt, SIGNAL(callback_comp_connected(QUuid)),
this, SLOT(on_comp_connected(QUuid)));
鉴于moc_mainwindow.cpp中的插槽肯定是(我检查过它的插槽#1),究竟是什么原因可以阻止连接发生?
如果我尝试将testSendQuuid(QUuid)
信号连接到插槽,我就没有这样的信号,也没有这样的插槽。
我不能为我的生活弄清楚为什么Qt否认存在绝对存在的插槽!
答案 0 :(得分:5)
我通过在mainwindow类中添加Q_OBJECT宏来解决问题。
答案 1 :(得分:4)
检查moc_mainwindow.cpp
中是否有Build Path
。或者您正在使用其他一些moc_window.cpp文件。因为,对于例如:在QtCreator中,它将源构建到新的构建目录。如果您尝试在其他位置打开源,它也会使用旧的moc_cpp文件。
我想说的是您检查的moc文件可能包含那些插槽定义,但编译器可能正在使用之前创建的其他moc文件。
答案 2 :(得分:0)
你需要
connect(acnInt, SIGNAL(callback_comp_connected(QUuid)), this, SLOT(on_comp_connected(const QUuid&)));
传递值不应匹配传递const引用。
但我尝试了它,确实如此。我在Windows上使用Qt 4.7.4在QtCreator 2.4.1上创建了一个最小项目。我在主窗口中添加了一个标签,并修改了MainWindow.cpp,如下所示
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(
this, SIGNAL(testSendQuuid(QUuid)),
this, SLOT(on_comp_connected(QUuid))
);
QUuid x = QUuid::createUuid();
emit testSendQuuid(x);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_comp_connected(const QUuid &qcid)
{
ui->label->setText(qcid.toString());
}
我在主窗口上找到了一个uuid。
我还尝试将连接中的两个QUuid参数更改为const QUuid&这也有效。
所以你的问题必须与构建相关。
答案 3 :(得分:0)
我解决了这样的问题
private slots:
void on_comp_connected(const QUuid &qcid);
然后在构造函数中
connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(on_comp_connected(QUuid)));