Qt / CMake:在标识符'slots'之前缺少':'

时间:2013-11-25 05:32:04

标签: c++ windows qt cmake qmake

我正在尝试使用我自己的cmake文件而不是随附的qmake .pro文件从Qt编译录音机示例,我收到以下错误:

qtaudiorecorder\audiorecorder.h(63) : error C2146: syntax error : missing ':' before identifier 'slots'

我的CMakeFile:

find_package(Qt5 REQUIRED COMPONENTS multimedia widgets)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Multimedia REQUIRED)
add_definitions(-DQT_NO_KEYWORDS)

add_executable(audio_recorder audiorecorder.cpp main.cpp qaudiolevel.cpp qaudiolevel.h audiorecorder.h audiorecorder.ui audiorecorder_small.ui)
qt5_use_modules(audio_recorder Widgets Multimedia)

audiorecorder.h:

#ifndef AUDIORECORDER_H
#define AUDIORECORDER_H

#include <QMainWindow>
#include <QMediaRecorder>
#include <QUrl>

QT_BEGIN_NAMESPACE
namespace Ui { class AudioRecorder; }
class QAudioRecorder;
class QAudioProbe;
class QAudioBuffer;
QT_END_NAMESPACE

class AudioRecorder : public QMainWindow
{
    Q_OBJECT

public:
    AudioRecorder(QWidget *parent = 0);
    ~AudioRecorder();

public slots:
    void processBuffer(const QAudioBuffer&);

private slots:
    void setOutputLocation();
    void togglePause();
    void toggleRecord();

    void updateState(QMediaRecorder::State);
    void updateProgress(qint64 pos);
    void displayErrorMessage();

private:
    Ui::AudioRecorder *ui;

    QAudioRecorder *audioRecorder;
    QAudioProbe *probe;
    bool outputLocationSet;

};

#endif // AUDIORECORDER_H

我无法理解为什么我无法使用我的cmake文件编译Qt示例(它使用qmake编译得很好)。

2 个答案:

答案 0 :(得分:5)

您的问题很可能包含

add_definitions(-DQT_NO_KEYWORDS)

在您的cmake文件中。

答案 1 :(得分:0)

在Qt中,“slot”是一个特殊的宏。在正常过程中,首先调用MOC(元对象编译器)将“槽”解释为c ++编译器可以理解的一些代码。我认为.pro文件中有一些代码在将文件提供给c ++编译器之前调用MOC。

总而言之,你必须首先调用MOC,否则C ++编译器会对“插槽”抱怨。