Qt 编译器错误:未在此范围内声明"emit"
Qt compiler error: 'emit' was not declared in this scope
我正在尝试创建一个简单的 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 文件中,如本文末尾所述。
相关文章:
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 如何找到在本地范围内声明的变量的地址?
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 错误:"SHGetKnownFolderPath"未在此范围内声明
- 错误:'Sprite'未在此范围内声明