C++ Qt编译器错误:';发射';未在此范围中声明

C++ Qt编译器错误:';发射';未在此范围中声明,c++,qt,C++,Qt,我试图创建一个简单的GUI,它可以创建多个线程,并在后台执行一些操作,同时GUI始终保持响应。我正在使用QT框架的QThreads来实现这一点,但我面临上述问题。下面是代码 //线程 这是我的threading.h文件 #ifndef THREADING #define THREADING #include <QThread> #include <QObject> class Threading : public QThread { Q_OBJECT pri

我试图创建一个简单的GUI,它可以创建多个线程,并在后台执行一些操作,同时GUI始终保持响应。我正在使用QT框架的QThreads来实现这一点,但我面临上述问题。下面是代码

//线程 这是我的threading.h文件

#ifndef THREADING
#define THREADING

#include <QThread>
#include <QObject>

class Threading : public QThread
{
    Q_OBJECT

private:
   int num;

public:
    explicit Threading(QObject * parent = 0);
    void run();
    void set_num(int);
    int get_num();

Q_SIGNALS:
    void someSignal(int);

};
#ifndef线程
#定义线程
#包括
#包括
类线程:公共QThread
{
Q_对象
私人:
int-num;
公众:
显式线程(QObject*parent=0);
无效运行();
无效集_num(int);
int get_num();
Q_信号:
无效信号(int);
};
//这是threading.cpp文件

#include "threading.h"
#include <QtCore>

Threading::Threading(QObject *parent) : QThread(parent)
{

}

void Threading:: run()
{
  emit someSignal(get_num());
}

void Threading :: set_num(int num)
{
    QMutex mutex;
    mutex.lock();
    this->num = num;
    mutex.unlock();
}

int Threading :: get_num()
{
    return num;
}
#包括“threading.h”
#包括
线程::线程(QObject*parent):QThread(parent)
{
}
void Threading::run()
{
发出某种信号(get_num());
}
void Threading::set_num(int num)
{
QMutex互斥;
mutex.lock();
这个->num=num;
mutex.unlock();
}
int线程::get_num()
{
返回num;
}
//主窗口

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCore>
#include "threading.h"

typedef unsigned char   byte;

namespace Ui {
 class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Threading *threadPointer;
};
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括“threading.h”
typedef无符号字符字节;
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
线程*线程指针;
};
//Mainwindow.cpp 在这个文件中,我正在启动线程

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "global.h"
#include <QtCore>
#include <QObject>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{

    ui-> setupUi(this);
   threadPointer = new Threading(this);
   connect(threadPointer,SIGNAL(someSignal(int)),this,SLOT(onSomeSignal()));
 }

void MainWindow::on_clicked()
{
    threadPointer->set_num(0);
    threadPointer->start();    
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“global.h”
#包括
#包括
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
threadPointer=新线程(此);
连接(threadPointer,SIGNAL(someSignal(int)),此,插槽(onSomeSignal());
}
void main window::单击时()
{
threadPointer->set_num(0);
threadPointer->start();
}

我在网上看到了一些视频,它们的代码非常相似,但奇怪的是,它们工作得很好,而我的却不是。这和版本有关吗?任何帮助都将不胜感激。

您可以使用
Q_EMIT
来代替
EMIT
,绕过此问题,或者将信号作为正常函数调用(
EMIT
是可选的,只是为了代码可读性):

emit
是qobjectdefs.h中定义的空宏。您应该进一步调查,并试图理解为什么没有定义它(例如,如果
QT\u NO\u关键字
是在某处定义的,以及为什么)

您可能还需要检查

CONFIG += no_keywords

行存在于您的pro文件中,如本部分末尾所述

您可以使用
Q_EMIT
代替
EMIT
绕过该问题,或者仅将信号作为正常函数调用(
EMIT
是可选的,仅用于代码可读性):

emit
是qobjectdefs.h中定义的空宏。您应该进一步调查,并试图理解为什么没有定义它(例如,如果
QT\u NO\u关键字
是在某处定义的,以及为什么)

您可能还需要检查

CONFIG += no_keywords

行存在于您的pro文件中,如本部分末尾所述

根据我看到的,
get_num()
set_num()
使用
num
,但我没有看到您在Threading.hIt中定义的
num
应为
私有:int num@eyllanesc这是一个打字错误。我现在已经编辑过了。@Alex44谢谢你指出它。根据我看到的,
get_num()
set_num()
使用
num
,但是我没有看到你在线程中定义的
num
。hIt看起来像
private:int number应为
私有:int num@eyllanesc这是一个打字错误。我现在已经编辑好了。@Alex44谢谢你指出它。这是正确的。它很有魅力@p-a-o-l-oThat瞄准了目标。它很有魅力@p-a-o-l-o