我得到的问题是调用connect时出现以下错误消息,MRC是冗余的命名空间,我认为Qt不应该添加该冗余的命名空间-boundSubWindow未在MRC中定义。我的理解是找不到插槽函数,因为它的名称之前是MRC ::。
QObject :: connect:z:\ mrc \ mrc \ mrc.h:23中没有这样的插槽MRC :: boundSubWindow :: myFunc(unsigned char *,int) QObject :: connect:(接收方名称:“ MRCClass”)
代码是
---------- mrc.h ----------
#include <QtWidgets/QMainWindow>
#include "ui_MRC.h"
#include "myThread.h"
#include "boundsubwindow.h"
class MRC : public QMainWindow
{
Q_OBJECT
public:
MRC(QWidget *parent = Q_NULLPTR) : QMainWindow(parent)
{
ui.setupUi(this);
m_Thread = new myThread;
m_Subwindow = new boundSubWindow;
connect(MRC::m_Thread, SIGNAL(mySignal(char *, int)),
this, SLOT(boundSubWindow::myFunc(unsigned char *, int)));
}
static inline myThread *m_Thread;
boundSubWindow *m_Subwindow;
private:
Ui::MRCClass ui;
};
---------- boundsubwindow.h ----------
#include <QMdiSubWindow>
class boundSubWindow : public QMdiSubWindow
{
public:
boundSubWindow() {}
public slots:
void myFunc(unsigned char *, int);
};
---------- boundsubwindow.h ----------
void boundSubWindow::myFunc(unsigned char *, int) {}
---------- myThread.h ----------
#include <QThread>
class myThread : public QThread
{
Q_OBJECT
public:
myThread() {}
signals:
void mySignal(char *, int);
};
我跳过了为Qt GUI应用程序自动生成的main.cpp,然后自动生成的MRC.ui-然后使用Qt Creator添加了QMdiArea。我正在使用Visual Studio 2017和Qt 5.13
答案 0 :(得分:1)
这是错误的:
connect(MRC::m_Thread, SIGNAL(mySignal(char *, int)),
this, SLOT(boundSubWindow::myFunc(unsigned char *, int)));
boundSubWindow::myFunc
不是this
的广告位。另外,为m_Thread成员变量指定名称空间似乎很多余。您可能想要这样:
connect(m_Thread, SIGNAL(mySignal(char *, int)),
m_subWindow, SLOT(myFunc(unsigned char *, int)));
另外,将Q_OBJECT
宏添加到boundSubWindw
类中,然后显式重新运行 qmake (将这些Qt宏添加到以前没有的文件中时,必须这样做有他们。)
此外,您应该使用新的connect语法,以便获得编译时错误而不是运行时错误:
connect(m_Thread, &myThread::mySignal,
m_subWindow, &boundSubWindow::myFunc);
最后,类名以大写开头是Qt的常见惯例,因此,如果希望其他Qt程序员能够轻松地读取代码,请考虑重命名为BoundSubWindow
和MyThread
。>