No definition of QLabel class in my Qt 5.1[SOLVED]???
-
Hi,
I am learning Qt through Qt 5.1 32 bit on Linux Mint 15 32 bit. Default install path: ~/Qt5.1.0/... I created a very simple program in Qt creator:
@#include<QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QLabel l;
l.show();
return app.exec();}@
I get the following output:
@01:32:24: Running steps for project untitled...
01:32:24: Configuration unchanged, skipping qmake step.
01:32:24: Starting: "/usr/bin/make"
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIE -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../../Qt5.1.0/5.1.0/gcc/mkspecs/linux-g++ -I. -I../../../Qt5.1.0/5.1.0/gcc/include -I../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets -I../../../Qt5.1.0/5.1.0/gcc/include/QtGui -I../../../Qt5.1.0/5.1.0/gcc/include/QtCore -I. -o main.o main.cpp
In file included from ../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets/QtWidgets:98:0,
from main.cpp:1:
../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets/qlabel.h:52:24: error: redefinition of 'class QPushButton'
In file included from ../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets/qcommandlinkbutton.h:45:0,
from ../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets/QtWidgets:89,
from main.cpp:1:
../../../Qt5.1.0/5.1.0/gcc/include/QtWidgets/qpushbutton.h:54:24: error: previous definition of 'class QPushButton'
main.cpp: In function 'int main(int, char**)':
main.cpp:6:13: error: aggregate 'QLabel l' has incomplete type and cannot be defined
make: *** [main.o] Error 1
01:32:26: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project untitled (kit: Desktop Qt 5.1.0 GCC 32bit)
When executing step 'Make'
01:32:26: Elapsed time: 00:02.@And here is the .pro file:
@#-------------------------------------------------Project created by QtCreator 2013-12-30T15:26:07
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled
TEMPLATE = appSOURCES += main.cpp
HEADERS +=
@To investigate what is going wrong I sniffed around into the Qt5.1.0/gcc/include/QtWidgets/ directory
only to discover that there is no definition of class QLabel in qlabel.h..what the heck...and on top of it qlabel.h contains definition of QPushButton??? which is also defined in qpushbutton.h and this I guess is causing the QPushButton redefinition error. I did a simple grep search on the include directory:
@ryan@mint15 ~/Qt5.1.0/5.1.0/gcc/include $ find -type f -exec grep QLabel '{}' +
./QtQuick/5.1.0/QtQuick/private/qquicktextcontrol_p.h:// also used by QLabel
./QtDesigner/5.1.0/QtDesigner/private/formbuilderextra_p.h:class QLabel;
./QtDesigner/5.1.0/QtDesigner/private/formbuilderextra_p.h: static bool applyBuddy(const QString &buddyName, BuddyMode applyMode, QLabel label);
./QtDesigner/5.1.0/QtDesigner/private/formbuilderextra_p.h: typedef QHash<QLabel, QString> BuddyHash;
./QtDesigner/5.1.0/QtDesigner/private/qdesigner_widget_p.h:#include <QtWidgets/QLabel>
./QtDesigner/5.1.0/QtDesigner/private/stylesheeteditor_p.h:#include <QtWidgets/QLabel>
./QtDesigner/5.1.0/QtDesigner/private/stylesheeteditor_p.h: QLabel *m_validityLabel;
./QtWidgets/5.1.0/QtWidgets/private/qwidgettextcontrol_p.h:// also used by QLabel
./QtWidgets/5.1.0/QtWidgets/private/qlabel_p.h:class QLabelPrivate : public QFramePrivate
./QtWidgets/5.1.0/QtWidgets/private/qlabel_p.h: Q_DECLARE_PUBLIC(QLabel)
./QtWidgets/5.1.0/QtWidgets/private/qlabel_p.h: QLabelPrivate() {}
./QtWidgets/5.1.0/QtWidgets/private/qheaderview_p.h: QLabel *sectionIndicator;
./QtWidgets/5.1.0/QtWidgets/private/qcolordialog_p.h:class QLabel;
./QtWidgets/5.1.0/QtWidgets/private/qcolordialog_p.h: QLabel *lblBasicColors;
./QtWidgets/5.1.0/QtWidgets/private/qcolordialog_p.h: QLabel *lblCustomColors;
./QtWidgets/5.1.0/QtWidgets/private/qcalendartextnavigator_p.h:class QLabel;
./QtWidgets/5.1.0/QtWidgets/private/qcalendartextnavigator_p.h: QLabel *m_dateText;
./QtWidgets/5.1.0/QtWidgets/private/qsystemtrayicon_p.h:class QLabel;
./QtWidgets/5.1.0/QtWidgets/private/qfontdialog_p.h:class QLabel;
./QtWidgets/5.1.0/QtWidgets/private/qfontdialog_p.h: QLabel *familyAccel;
./QtWidgets/5.1.0/QtWidgets/private/qfontdialog_p.h: QLabel *styleAccel;
./QtWidgets/5.1.0/QtWidgets/private/qfontdialog_p.h: QLabel *sizeAccel;
./QtWidgets/5.1.0/QtWidgets/private/qfontdialog_p.h: QLabel *writingSystemAccel;
./QtWidgets/qprogressdialog.h:class QLabel;
./QtWidgets/qprogressdialog.h: void setLabel(QLabel *label);
./QtWidgets/qmessagebox.h:class QLabel;
./QtWidgets/qlabel.h:class QLabelPrivate;
./QtWidgets/qlabel.h: Q_DISABLE_COPY(QLabel)
./QtWidgets/qlabel.h: Q_DECLARE_PRIVATE(QLabel)
./QtCore/qnamespace.h: // Text formatting flags for QPainter::drawText and QLabel.
@Result....no definition of a class calle QLabel anywhere. As you can see only forward declarations of a class QLabel and some class called QLabelPrivate. Where the hell is QLabel? How can I mess up such a simple program OR is there something wrong with Qt5.1 ??
Thanks.EDIT:: I reinstalled Qt 5.1 and now the qlabel.h file contains what it should. All errors are gone. I don't know what happened earlier huh!!!
-
[quote author="Ravi S. Jethani" date="1388607785"]
To investigate what is going wrong I sniffed around into the Qt5.1.0/gcc/include/QtWidgets/ directory only to discover that there is no definition of class QLabel in qlabel.h.
[/quote]
That's not where QLabel is actually defined and implemented. The directory for the QWidgets is:
<QTDIR>\qtbase\src\widgets\widgetsDid you compile Qt yourself or downloaded a precompiled version?
-
[quote author="raven-worx" date="1388647896"]
Did you compile Qt yourself or downloaded a precompiled version?
[/quote]I installed the binary version(the .run file) from Qt download page few months back when Qt5.1 was released.