2016-05-11 7 views
1

Ich arbeite an einer sehr grundlegenden C++ - Anwendung mit Qt5.6 mit CMake. Git Repo Here.Warum können meine C++ - Klassen Qt nicht verwenden?

Mein Problem? Meine main.cpp kann #include Qt Klassen wie <QtCore/QObject>, aber meine definierten Klassen können nicht.

error: QtCore/QObject: No such file or directory 

Ich habe die latest version of Qt with Qt Creator here heruntergeladen.

Screenshot depicting the Qt Creator IDE with the error message "QtCore/QObject: No such file or directory" emanating from a user-defined header file.

Könnte dies eine nicht ordnungsgemäß eingerichtet Qt-Umgebung sein? Ich verstehe nicht, wie main.cpp auf Qt zugreifen kann, aber meine definierten Klassen können nicht.

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11) 

project(testproject) 

# Find includes in corresponding build directories 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 
# Instruct CMake to run moc automatically when needed. 
set(CMAKE_AUTOMOC ON) 

############ OpenCV PACKAGE ######### 
set(BUILD_SHARED_LIBS ON) 
set(OpenCV_FIND_QUIETLY FALSE) 
find_package(OpenCV REQUIRED) 
include_directories(${OpenCV_INCLUDE_DIRS}) 

# Find the QtWidgets library 
find_package(Qt5Widgets) 
qt5_wrap_cpp(tcp_hdr_moc ${PROJECT_SOURCE_DIR}/TcpServer.h) 
# Tell CMake to create the helloworld executable 
add_executable(helloworld WIN32 main.cpp 
    TcpServer.h TcpServer.cpp 
    ) 
# Use the Widgets module from Qt 5. 
target_link_libraries(helloworld Qt5::Widgets 
    ${OpenCV_LIBS} 
    ${PROJECT_SOURCE_DIR}/TcpServer.cpp 
    ${PROJECT_SOURCE_DIR}/TcpServer.h 
    ) 

main.cpp

#include <iostream> 

#include <QtWidgets/QApplication> 
#include <QtCore/QObject> 
//#include "TcpServer.h" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QString test = "Hello"; 
    QObject test2; 
    int i = 0; 
// TcpServer server; 
} 

Benutzerdefinierte Klasse: TcpServer.cpp

#include "TcpServer.h" 
#include <QtNetwork/QTcpSocket> 
#include <QtCore/QByteArray> 
#include <QtCore/QtDebug> 
#include <QtCore/QString> 
#include <opencv2/core.hpp> 
#include <opencv2/opencv.hpp> 

TcpServer::TcpServer(QObject *parent) : 
QObject(parent) 
{ 
    server = new QTcpServer(this); 
    // whenever a user connects, it will emit signal 
    connect(server, SIGNAL(newConnection()), 
     this, SLOT(newConnection())); 
    if (!server->listen(QHostAddress::Any, 9999)) 
     qDebug() << "Server could not start"; 
    else 
     qDebug() << "Server started!"; 
    vCapture = new VideoCapture(0); 
} 
void TcpServer::newConnection() 
{ 
    QTcpSocket *socket = server->nextPendingConnection(); 
    QByteArray ContentType = ("HTTP/1.0 200 OK\r\n" \ 
     "Cache-Control: no-cache\r\n" \ 
     "Cache-Control: private\r\n" \ 
     "Content-Type: multipart/x-mixed-replace;boundary=--boundary\r\n"); 
    socket->write(ContentType); 
    std::vector<uchar> buff; 
    Mat img; //OpenCV Material 
    while (1) { 
     // Image to Byte Array via OPENCV Method 
     buff.clear();buff.empty(); 
     vCapture->read(img); //Read from webcam 

     //TODO set the compression parameters. 
     imencode(".jpg", img, buff); 
     std::string content(buff.begin(), buff.end()); 
     QByteArray CurrentImg(QByteArray::fromStdString(content)); 
     QByteArray BoundaryString = ("--boundary\r\n" \ 
      "Content-Type: image/jpeg\r\n" \ 
      "Content-Length: "); 
     BoundaryString.append(QString::number(CurrentImg.length())); 
     BoundaryString.append("\r\n\r\n"); 

     socket->write(BoundaryString); 
     socket->write(CurrentImg); // Write The Encoded Image 
     socket->flush(); 
    } 
} 

User Defined Klasse-Header, die den Fehler auslöst: TcpServer.h

#ifndef TCPSERVER_H 
#define TCPSERVER_H 

#include <QtCore/QObject> 
#include <QtNetwork/QTcpServer> 
#include "opencv2/videoio.hpp" 

using namespace cv; 
class TcpServer : public QObject 
{ 
    Q_OBJECT 

public: 
    explicit TcpServer(QObject *parent = 0); 
    void newConnection(); 
private: 
    QTcpServer* server; 
    VideoCapture* vCapture; 
}; 

#endif 

Als Referenz arbeite ich an diesen beiden verwandten Stapelüberlauffragen.

How to Create a HTTP MJPEG Streaming Server With QTcp-Server Sockets?

Error while using QTcpSocket.

+0

zeigen Sie den Inhalt des Projekts (CMake) Datei – ixSci

+0

Es ist alles in der Git-Repository oben. Hier ist die CMakeLists https://github.com/DanielArnett/opencv-mjpg/blob/master/CMakeLists.txt#L3 –

+2

Es ist eine Regel von Stack Overflow, dass Code in Frage Post selbst enthalten sein sollte, nicht auf andere verwiesen Seite? ˅. Siehe [fragen] für weitere Informationen. – Tsyvarev

Antwort

4

find_package(Qt5Core) neben find_package(Qt5Widgets) hinzufügen und fügen Sie die folgenden Zeilen:

include_directories(${Qt5Widgets_INCLUDE_DIRS}) 
include_directories(${Qt5Core_INCLUDE_DIRS}) 

Und vergessen Sie nicht Qt5::Core zum target_link_libraries hinzuzufügen. BTW, ich sehe Sie verwenden QtNetwork; Sie müssen die gleichen Schritte für dieses Modul auch machen. Und für jedes andere Modul, das Sie verwenden werden.

+0

Änderungen vorgenommen, aktualisiert Github, um übereinzustimmen, immer noch den gleichen Fehler. –

+0

Wenn ich 'find_package (Qt5Widgets Qt5Core) versuche, bekomme ich die Antwort' error: find_package mit ungültigem Argument "Qt5Core" 'aufgerufen, also habe ich es in 3 Anweisungen aufgeteilt. –

+0

@DanielArnett, sorry über den Fehler in der Antwort. Hast du versucht, einen sauberen Build zu machen? – ixSci