Linking error when subclassing QChartView - c++

I tried to override the mouseMoveEvent method by subclassing ChartView and I get a linking error which has something to do with the constructor of ChartView class.
class ChartView : public QChartView
{
Q_OBJECT
public:
ChartView(QChart* chart, QWidget* parent = 0);
protected:
void mouseMoveEvent(QMouseEvent* event) override;
};
ChartView::ChartView(QChart* chart, QWidget* parent)
: QChartView(chart, parent)
{
this->setMouseTracking(true);
}
void ChartView::mouseMoveEvent(QMouseEvent* event)
{
qDebug() << event->pos();
}
The error:
1>mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl ChartView::metaObject(void)const " (?metaObject#ChartView##UEBAPEBUQMetaObject##XZ)
1>mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl ChartView::qt_metacast(char const *)" (?qt_metacast#ChartView##UEAAPEAXPEBD#Z)
1>mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl ChartView::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall#ChartView##UEAAHW4Call#QMetaObject##HPEAPEAX#Z)
When I remove the constructor of ChartView, the problem is gone, but I dont know why, because I also dont understand the error.
What am I doing wrong and how can I fix this problem?

Before building your application, you need to clean qmake and run it again. Then, you can rebuild the solution. Problem is fixed.

Related

Qt C++ LNK2019: unresolved external symbol using QNetworkAccessManager

I am trying to run a simple piece of code using the documentation provided here https://doc.qt.io/qt-5/qnetworkaccessmanager.html. I am using Qt Creator with MSVC2017 64-bit Kit on Windows 10. My knowledge of C++ and Classes is very basic.
The code gives linker errors I don't know why. I have tried cleaning and re-building again but no success. Any help would be appreciated. Thanks!
I create a new project in Qt Creator with mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void replyFinished(QNetworkReply *reply);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
And then add these lines in mainwindow.cpp and compile.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MainWindow::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
}
void MainWindow::replyFinished(QNetworkReply *reply)
{
//
}
I get linker errors at the output when I compile using MSVC2017 64-bit Kit. The issue is same if I use a different Kit (MinGW).
Here's my .pro file :
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
Here's the compiler output:
12:52:23: Running steps for project Proj2...
12:52:23: Configuration unchanged, skipping qmake step.
12:52:23: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe"
C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\Proj2.exe #C:\Users\HP\AppData\Local\Temp\Proj2.exe.7376.15.jom
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QNetworkRequest::QNetworkRequest(class QUrl const &)" (__imp_??0QNetworkRequest##QEAA#AEBVQUrl###Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow##QEAA#PEAVQWidget###Z)
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QNetworkRequest::~QNetworkRequest(void)" (__imp_??1QNetworkRequest##QEAA#XZ) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow##QEAA#PEAVQWidget###Z)
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QNetworkAccessManager::QNetworkAccessManager(class QObject *)" (__imp_??0QNetworkAccessManager##QEAA#PEAVQObject###Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow##QEAA#PEAVQWidget###Z)
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl QNetworkAccessManager::~QNetworkAccessManager(void)" (__imp_??1QNetworkAccessManager##UEAA#XZ) referenced in function "public: virtual void * __cdecl QNetworkAccessManager::`scalar deleting destructor'(unsigned int)" (??_GQNetworkAccessManager##UEAAPEAXI#Z)
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class QNetworkReply * __cdecl QNetworkAccessManager::get(class QNetworkRequest const &)" (__imp_?get#QNetworkAccessManager##QEAAPEAVQNetworkReply##AEBVQNetworkRequest###Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow##QEAA#PEAVQWidget###Z)
mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl QNetworkAccessManager::finished(class QNetworkReply *)" (__imp_?finished#QNetworkAccessManager##QEAAXPEAVQNetworkReply###Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow##QEAA#PEAVQWidget###Z)
mainwindow.obj : error LNK2001: unresolved external symbol "protected: virtual class QNetworkReply * __cdecl QNetworkAccessManager::createRequest(enum QNetworkAccessManager::Operation,class QNetworkRequest const &,class QIODevice *)" (?createRequest#QNetworkAccessManager##MEAAPEAVQNetworkReply##W4Operation#1#AEBVQNetworkRequest##PEAVQIODevice###Z)
mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl QNetworkAccessManager::metaObject(void)const " (?metaObject#QNetworkAccessManager##UEBAPEBUQMetaObject##XZ)
mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl QNetworkAccessManager::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall#QNetworkAccessManager##UEAAHW4Call#QMetaObject##HPEAPEAX#Z)
mainwindow.obj : error LNK2001: unresolved external symbol "public: virtual void * __cdecl QNetworkAccessManager::qt_metacast(char const *)" (?qt_metacast#QNetworkAccessManager##UEAAPEAXPEBD#Z)
mainwindow.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct QMetaObject const QNetworkAccessManager::staticMetaObject" (__imp_?staticMetaObject#QNetworkAccessManager##2UQMetaObject##B)
Hint on symbols that are defined and could potentially match:
"__declspec(dllimport) public: static struct QMetaObject const QMainWindow::staticMetaObject" (__imp_?staticMetaObject#QMainWindow##2UQMetaObject##B)
mainwindow.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct QMetaObject const QNetworkReply::staticMetaObject" (__imp_?staticMetaObject#QNetworkReply##2UQMetaObject##B)
Hint on symbols that are defined and could potentially match:
"__declspec(dllimport) public: static struct QMetaObject const QMainWindow::staticMetaObject" (__imp_?staticMetaObject#QMainWindow##2UQMetaObject##B)
debug\Proj2.exe : fatal error LNK1120: 12 unresolved externals
Your .pro file lacks network module import. Change first line to add network library.
QT += core gui network
You can see this from the documentation, it says there
qmake: QT += network

VS2013 with QT5.3.2 using Websocket and got a unresolved external symbol issue

I got a problem with VS2013 and QT5.3.2.
when I am using Websocket, it says unresolved external symbol with QWebSocket::sendTextMessage and other websocket functions.
I have already #include <QtWebSockets/QWebSocket> and set the QT Project Setting and checked WebKit and Network Module.
This is the full error message I have got:
1>mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QWebSocket::~QWebSocket(void)" (__imp_??1QWebSocket##UAE#XZ),referenced in function "public: virtual __thiscall MWebSocket::~MWebSocket(void)" (??1MWebSocket##UAE#XZ)
1>MWebSocket.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall QWebSocket::~QWebSocket(void)" (__imp_??1QWebSocket##UAE#XZ)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QWebSocket::QWebSocket(class QString const &,enum QWebSocketProtocol::Version,class QObject *)" (__imp_??0QWebSocket##QAE#ABVQString##W4Version#QWebSocketProtocol##PAVQObject###Z),referenced in function "public: __thiscall MWebSocket::MWebSocket(class QUrl const &,class QObject *)" (??0MWebSocket##QAE#ABVQUrl##PAVQObject###Z)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __int64 __thiscall QWebSocket::sendTextMessage(class QString const &)" (__imp_?sendTextMessage#QWebSocket##QAE_JABVQString###Z),referenced in function "private: void __thiscall MWebSocket::onConnected(void)" (?onConnected#MWebSocket##AAEXXZ)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebSocket::close(enum QWebSocketProtocol::CloseCode,class QString const &)" (__imp_?close#QWebSocket##QAEXW4CloseCode#QWebSocketProtocol##ABVQString###Z),referenced in function "private: void __thiscall MWebSocket::onTextMessageReceived(class QString)" (?onTextMessageReceived#MWebSocket##AAEXVQString###Z)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebSocket::open(class QUrl const &)" (__imp_?open#QWebSocket##QAEXABVQUrl###Z),referenced in function "public: __thiscall MWebSocket::MWebSocket(class QUrl const &,class QObject *)" (??0MWebSocket##QAE#ABVQUrl##PAVQObject###Z)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebSocket::connected(void)" (__imp_?connected#QWebSocket##QAEXXZ),referenced in function "public: __thiscall MWebSocket::MWebSocket(class QUrl const &,class QObject *)" (??0MWebSocket##QAE#ABVQUrl##PAVQObject###Z)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebSocket::disconnected(void)" (__imp_?disconnected#QWebSocket##QAEXXZ),referenced in function "public: __thiscall MWebSocket::MWebSocket(class QUrl const &,class QObject *)" (??0MWebSocket##QAE#ABVQUrl##PAVQObject###Z)
1>MWebSocket.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall QWebSocket::textMessageReceived(class QString const &)" (__imp_?textMessageReceived#QWebSocket##QAEXABVQString###Z),referenced in function "private: void __thiscall MWebSocket::onConnected(void)" (?onConnected#MWebSocket##AAEXXZ)
1>MWebSocket.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct QMetaObject const QWebSocket::staticMetaObject" (__imp_?staticMetaObject#QWebSocket##2UQMetaObject##B)
1>debug/\MapleUI.exe : fatal error LNK1120: 9 unresolved externals
This is the code for Websocket:
//HEADER
#pragma once
#include "global.h"
class MWebSocket : public QObject
{
Q_OBJECT
public:
explicit MWebSocket(const QUrl &url, QObject *parent = Q_NULLPTR);
Q_SIGNALS:
void closed();
private Q_SLOTS:
void onConnected();
void onTextMessageReceived(QString message);
private:
QWebSocket m_webSocket;
QUrl m_url;
};
//CPP
#include "global.h"
#include "MWebSocket.h"
QT_USE_NAMESPACE
//! [constructor]
MWebSocket::MWebSocket(const QUrl &url, QObject *parent) :
QObject(parent),
m_url(url)
{
connect(&m_webSocket, &QWebSocket::connected, this, &MWebSocket::onConnected);
connect(&m_webSocket, &QWebSocket::disconnected, this, &MWebSocket::closed);
m_webSocket.open(QUrl(url));
}
//! [constructor]
//! [onConnected]
void MWebSocket::onConnected()
{
qDebug() << "WebSocket connected";
connect(&m_webSocket, &QWebSocket::textMessageReceived,
this, &MWebSocket::onTextMessageReceived);
m_webSocket.sendTextMessage(QStringLiteral("H2ello, world!"));
}
//! [onConnected]
//! [onTextMessageReceived]
void MWebSocket::onTextMessageReceived(QString message)
{
qDebug() << "Message received:" << message;
m_webSocket.close();
}
//! [onTextMessageReceived]
How can I solve this problem?
Just find out that add Qt5WebSocketsd.lib to the project will fix the problem. I dont know why this need to be manually, cuz before when I using other libs QT5 plugin will add them automate
According to the manual:
Header: #include <QWebSocketServer>
qmake: QT += websockets
Since: Qt 5.3
Inherits: QObject

LNK2019 (Unresolved external symbol) When Compiling with MSVC2013

Im working on a project using Qt/C++ originally compiled with MinGW64 (gcc 4.8). I decided to "port" it to MSVC2013, since I need to use some Windows API functions that doesn't work well in MinGW, but right now I'm stuck at this error:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl IMLoginView::clearFieldPass(void)" (?clearFieldPass#IMLoginView##QEAAXXZ) referenced in function "public: void __cdecl MainWindow::showConnectionErrorDialog(void)" (?showConnectionErrorDialog#MainWindow##QEAAXXZ)
imingestinglist.obj:-1: error: LNK2019: unresolved external symbol "public: static class QString __cdecl IMStorageSystem::getLogDir(void)" (?getLogDir#IMStorageSystem##SA?AVQString##XZ) referenced in function "private: class QList<int> __cdecl IMIngestingList::loadList(void)" (?loadList#IMIngestingList##AEAA?AV?$QList#H##XZ)
moc_imloginview.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl IMLoginView::login(void)" (?login#IMLoginView##QEAAXXZ) referenced in function "private: static void __cdecl IMLoginView::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall#IMLoginView##CAXPEAVQObject##W4Call#QMetaObject##HPEAPEAX#Z)
moc_imloginview.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl IMLoginView::handleError(enum ALFRED_ACCESS_ERROR)" (?handleError#IMLoginView##QEAAXW4ALFRED_ACCESS_ERROR###Z) referenced in function "private: static void __cdecl IMLoginView::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall#IMLoginView##CAXPEAVQObject##W4Call#QMetaObject##HPEAPEAX#Z)
moc_imloginview.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl IMLoginView::userDisconnected(void)" (?userDisconnected#IMLoginView##QEAAXXZ) referenced in function "private: static void __cdecl IMLoginView::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)"
The problem is: These methods aren't part of some external library, but part of the project itself. And I already triple checked that they are implemented. They aren't part of any template class either, but normal classes, and the log says the cpp files are being compiled. The same project links just fine with MinGW64.
I'm currently using Qt Creator 3.3.2 and QT 5.3.2.
What can be happening?
EDIT:
I Can't show much code, since its a closed-source project, but I can at least show the header and implementation layout of the methods:
imloginview.h:
class IMLoginView : public QWidget
{
Q_OBJECT
public:
explicit IMLoginView(QWidget *parent = 0);
void clearFieldPass();
~IMLoginView();
private:
//Lots of attributes
void configureComponents();
void keyPressEvent(QKeyEvent *event);
signals:
public slots:
void login();
void handleError(ALFRED_ACCESS_ERROR error);
void userDisconnected();
}
imloginview.cpp:
IMLoginView::IMLoginView(QWidget *parent) : //lots of initializations here
{
//Implementation
}
IMLoginView::~IMLoginView()
{
}
void IMLoginView::clearFieldPass()
{
//implementation
}
void IMLoginView::configureComponents()
{
//Implementation
}
void IMLoginView::keyPressEvent(QKeyEvent *event)
{
//implementation
}
void IMLoginView::login()
{
//implementation
}
void IMLoginView::handleError(ALFRED_ACCESS_ERROR error)
{
//implementation
}
void IMLoginView::userDisconnected()
{
//implementation
}
I'm sorry I really can't provide the actual method code, but its closed-source. =/

Can't build Qt example with Q_OBJECT (Can I avoid Qmake?)

As in Errors while compiling a test program using Qt I am following the book 'C++ GUI Programming with Qt 4' by Jasmin Blanchette and Mark Summerfield too. I don't have that mistake, and anyway I can't build it. It had been able to build until I started to write the constructor.
I use Qt 4.8 and MSVC 2010 via Qt add-in.
[EDIT]
Can I avoid using Qmake in Qt visual studio add-in?
[/EDIT]
My code:
finddialog.h
#ifndef FindDialog_H
#define FindDialog_H
#include <qdialog.h>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;
class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog(QWidget *parent=0);
signals:
void findNext(const QString &str, Qt::CaseSensitivity cs);
void findPrev(const QString &str, Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);
private:
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
};
#endif
finddialog.cpp
#include <QtGui>
#include <finddialog.h>
FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{
label = new QLabel(tr("Find &what: "));
lineEdit = new QLineEdit;
label->setBuddy(lineEdit);
caseCheckBox = new QCheckBox(tr("Match &case"));
backwardCheckBox = new QCheckBox(tr("Serch backward"));
findButton = new QPushButton(tr("&Find"));
findButton->setDefault(true);
findButton->setEnabled(false);
closeButton = new QPushButton(tr("CLose"));
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(enableFindButton(const QString &)));
connect(findButton, SIGNAL(findClicked()), this, SLOT(clicked()));
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
QHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);
QVBoxLayout *leftLayout = new QVBoxLayout;
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(backwardCheckBox);
QVBoxLayout *rightLayout = new QVBoxLayout;
rightLayout->addWidget(findButton);
rightLayout->addWidget(closeButton);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);
setWindowTitle(tr("Find"));
setFixedHeight(sizeHint().height());
}
void FindDialog::findClicked()
{
QString text = lineEdit->text();
Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
if(backwardCheckBox->isChecked())
emit findPrev(text, cs);
else emit findNext(text, cs);
}
void FindDialog::enableFindButton(const QString &text)
{
findButton->setEnabled(!text.isEmpty());
}
main.cpp
#include <qapplication.h>
#include <finddialog.h>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FindDialog *dialog = new FindDialog;
dialog->show();
return app.exec();
}
And the output:
1>------ Build started: Project: ex1, Configuration: Release Win32 ------
1>Build started 26.03.2013 23:36:17.
1>InitializeBuildStatus:
1> Touching "Release\ex1.unsuccessfulbuild".
1>ClCompile:
1> finddialog.cpp
1> main.cpp
1> Generating Code...
1>finddialog.obj : error LNK2019: unresolved external symbol "public: static struct QMetaObject const FindDialog::staticMetaObject" (?staticMetaObject#FindDialog##2UQMetaObject##B) referenced in function "public: static class QString __cdecl FindDialog::tr(char const *,char const *)" (?tr#FindDialog##SA?AVQString##PBD0#Z)
1>finddialog.obj : error LNK2019: unresolved external symbol "protected: void __thiscall FindDialog::findNext(class QString const &,enum Qt::CaseSensitivity)" (?findNext#FindDialog##IAEXABVQString##W4CaseSensitivity#Qt###Z) referenced in function "private: void __thiscall FindDialog::findClicked(void)" (?findClicked#FindDialog##AAEXXZ)
1>finddialog.obj : error LNK2019: unresolved external symbol "protected: void __thiscall FindDialog::findPrev(class QString const &,enum Qt::CaseSensitivity)" (?findPrev#FindDialog##IAEXABVQString##W4CaseSensitivity#Qt###Z) referenced in function "private: void __thiscall FindDialog::findClicked(void)" (?findClicked#FindDialog##AAEXXZ)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall FindDialog::metaObject(void)const " (?metaObject#FindDialog##UBEPBUQMetaObject##XZ)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall FindDialog::qt_metacast(char const *)" (?qt_metacast#FindDialog##UAEPAXPBD#Z)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall FindDialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall#FindDialog##UAEHW4Call#QMetaObject##HPAPAX#Z)
1>C:\Users\Family\Documents\Visual Studio 2010\Projects\ex1\Win32\Release\\ex1.exe : fatal error LNK1120: 6 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:02.21
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Thank you.
Code's been run before. It worked without any make-file. Just simple compilation in MSVC2010:
#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("Enter Your Age");
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider(Qt::Horizontal);
spinBox->setRange(0, 130);
slider->setRange(0, 130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)),
slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),
spinBox, SLOT(setValue(int)));
spinBox->setValue(35);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return app.exec();
}
Maybe it is quite a beginner's question. But if I had such one, maybe it would be helpful for someone else.
Errors were there because of my using Q_OBJECT, so my app cannot work without moc. Second example worked coorectly cause there was no the macros and moc wasn't needed necessarily.
And Can I avoid writing Qmake and moc? Yes I can. Qt Visual Studio add-in makes all required files automatically. If there are some problems like
1>finddialog.obj : error LNK2019: unresolved external symbol "public: static struct QMetaObject const FindDialog::staticMetaObject" (?staticMetaObject#FindDialog##2UQMetaObject##B) referenced in function "public: static class QString __cdecl FindDialog::tr(char const *,char const *)" (?tr#FindDialog##SA?AVQString##PBD0#Z)
1>finddialog.obj : error LNK2019: unresolved external symbol "protected: void __thiscall FindDialog::findNext(class QString const &,enum Qt::CaseSensitivity)" (?findNext#FindDialog##IAEXABVQString##W4CaseSensitivity#Qt###Z) referenced in function "private: void __thiscall FindDialog::findClicked(void)" (?findClicked#FindDialog##AAEXXZ)
1>finddialog.obj : error LNK2019: unresolved external symbol "protected: void __thiscall FindDialog::findPrev(class QString const &,enum Qt::CaseSensitivity)" (?findPrev#FindDialog##IAEXABVQString##W4CaseSensitivity#Qt###Z) referenced in function "private: void __thiscall FindDialog::findClicked(void)" (?findClicked#FindDialog##AAEXXZ)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall FindDialog::metaObject(void)const " (?metaObject#FindDialog##UBEPBUQMetaObject##XZ)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall FindDialog::qt_metacast(char const *)" (?qt_metacast#FindDialog##UAEPAXPBD#Z)
1>finddialog.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall FindDialog::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall#FindDialog##UAEHW4Call#QMetaObject##HPAPAX#Z)
Then reload the header file, where Q_OBJECT class was defined (just exclude the file, and add it again). New moc.cpp files will be created. Then rebuild the project.
I couldn't find any help for the Qt add-in. If someone had it, could you give the link, please.

Linker errors creating QLabel with doubleclick event

I'm creating a QLabel subclass which adds the DoubleClickEvent to it. I have created the following, but I'm getting some strange linker errors, maybe someone can point out what I've done wrong?
//Header
#ifndef IMAGE_LABEL_H
#define IMAGE_LABEL_H
#include <QLabel>
#include <QMouseEvent>
class image_label : public QLabel
{
Q_OBJECT
public:
image_label(QWidget* parent = 0);
~image_label();
signals:
void doubleClicked();
protected:
void mouseDoubleClickEvent(QMouseEvent * e);
};
#endif
//CPP
#include "image_label.h"
#include <QMouseEvent>
image_label::image_label(QWidget* parent) : QLabel(parent)
{
}
image_label::~image_label()
{
}
void image_label::mouseDoubleClickEvent(QMouseEvent* e)
{
if (e->button() == Qt::LeftButton)
{
emit doubleClicked();
QLabel::mouseDoubleClickEvent(e);
}
}
I get the following linker errors when I compile:
image_label.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall image_label::metaObject(void)const " (?metaObject#image_label##UBEPBUQMetaObject##XZ)
image_label.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall image_label::qt_metacast(char const *)" (?qt_metacast#image_label##UAEPAXPBD#Z)
image_label.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall image_label::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall#image_label##UAEHW4Call#QMetaObject##HPAPAX#Z)
image_label.obj : error LNK2019: unresolved external symbol "protected: void __thiscall image_label::doubleClicked(void)" (?doubleClicked#image_label##IAEXXZ) referenced in function "protected: virtual void __thiscall image_label::mouseDoubleClickEvent(class QMouseEvent *)" (?mouseDoubleClickEvent#image_label##MAEXPAVQMouseEvent###Z)
Can anybody help why I get these errors?
You must run the MOC preprocessor on the file image_label.h. This generates a file moc_image_label.cppthat you must include in the build. The error message indicates that you have not done this. (The symbols image_label::metaObject etc. that are mentioned in the error message are defined in moc_image_label.cpp.)