Qt 编译器错误:未在此范围内声明"emit"

Qt compiler error: 'emit' was not declared in this scope

本文关键字:范围内 声明 emit 编译器 错误 Qt      更新时间:2023-10-16

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

/

/Threading.h这是我的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);
};

这是线程.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;
}
/

/Mainwindow.h

#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;
};

主窗口.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();    
}

我在网上看到一些视频,它的代码完全相同,这很奇怪,但工作正常,而我的不是。它与版本有关吗?任何帮助将不胜感激。

您可以使用

Q_EMIT代替emit来绕过该问题,或者只是将信号作为普通函数调用(emit是可选的,只是为了代码可读性(:

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

emit 是在 qobjectdefs.h 中定义的空宏。您应该进一步调查,并尝试了解为什么没有定义它(例如,QT_NO_KEYWORDS是否在某处定义以及为什么(。

您可能还想检查是否

CONFIG += no_keywords

行存在于您的 PRO 文件中,如本文末尾所述。