1 Error + need an advice from you guys
-
Thanks guys ,
-
Hey guys , sorry about asking again , when I compile now I get 4 errors which is about linking , when I delete Q_OBJECT from the header of my class the problem goes away , but in the book it says when you use slots and signals you should include it , what do you guys think ?
Errors:
bq. finddialong.obj:-1: error: LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl Finddialong::metaObject(void)const " (?metaObject@Finddialong@@UEBAPEBUQMetaObject@@XZ)
finddialong.obj:-1: error: LNK2001: unresolved external symbol "public: virtual void * __cdecl Finddialong::qt_metacast(char const *)" (?qt_metacast@Finddialong@@UEAAPEAXPEBD@Z)
finddialong.obj:-1: error: LNK2001: unresolved external symbol "public: virtual int __cdecl Finddialong::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Finddialong@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)
finddialong.obj:-1: error: LNK2001: unresolved external symbol "public: static struct QMetaObject const Finddialong::staticMetaObject" (?staticMetaObject@Finddialong@@2UQMetaObject@@B)
debug\untitled10.exe:-1: error: LNK1120: 4 unresolved externals
-
Hi,
[quote]in the book it says when you use slots and signals you should include it[/quote]Yes, the book is correct.
[quote]finddialong.obj:-1: error: LNK2001: unresolved external symbol “public: virtual struct QMetaObject const * __cdecl Finddialong::metaObject(void)const “ (?metaObject@Finddialong@@UEBAPEBUQMetaObject@@XZ)[/quote]To avoid this error, run qmake after you add "Q_OBJECT" to the header.
-
@Project try, take a look to "qt5-book-code":https://github.com/mutse/qt5-book-code it could be useful for continue learning
-
@qxoz thanks , I'll check them out.
I'm sorry for posting late guys , I had to sleep + go to college :(
anyways when I installed qt it came with it a command prompt , when I opened it and wrote qmake it says you can place any variable assigement in option will be parsed and there's some option like -o file
i don't know what to do , I'm new to this , usually I just run the compiler and it just works.
-
Hey guys , I've gone to folder that the project is in " from command line that came with qt " and used qmake but it justs doesn't show anything , when I tried to compile it from qt creator it gives me the same error ?
maybe because I used qmake in the project ? theree's two folders when I create a new project , one is for the project files and the other is called build ....
-
I guess nothing worked :(
1- tried using qmake in the command line , didn't work
2- cleaned the project then ran qmake and build it and it did not work
3- used a new project and it did not workit just gives the same error and it says nameoffile.obj not found " the same error "
-
Windows is not especially user/developer friendly on the command line.
Where did you call qmake ? Did you call nmake afterwards ?
-
I called qmake in the command line , also in the project " when you right click " you'll find an option called " qmake " , what is nmake ? becaus when I tried it in the command line it says there's no such thing.
-
nmake is the command that will read the Makefiles generated by qmake and call the compiler/linker etc…
But I am just realizing… What version of Qt is installed ? VSXXXX or MinGW ? If the later, you need to call mingw32-make after qmake
-
Sorry for posting late , I have the qt 5.2.1 ( msvc 2010 , 32bit) if this is what you're looking for .. the creator is 3.0.1
-
Are you sure you are using the correct command line ?
Before taking too much time with it, does Qt Creator work correctly when building a default created application ? (using file -> new project -> use all defaults -> build )
-
Yes it works fine with the default building , it shows the main window just fine , as I said when I remove q_object the problem goes away , not sure why.
sorry for wasting your time with me :(
-
Let me just post the code here so you can check ^^
the interface for the class:
@#ifndef FINDDIALONG_H
#define FINDDIALONG_H
#include<QDialog>class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;class Finddialong : public QDialog
{
Q_OBJECT
public:
Finddialong(QWidget *parent=0);
signals:
void findNext(const QString &str,Qt::CaseSensitivity cs);
void findPrevious(const QString &str,Qt::CaseSensitivity cs);
private slots:
void findClicked();
void enablefindButton(const QString &text);
private:
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *backwardCheckBox;
QCheckBox *caseCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
};#endif // FINDDIALONG_H
@the implement for the class:
@#include<QtGui>
#include "finddialong.h"
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QPushButton>
#include<QLabel>
#include<QLineEdit>
#include<QCheckBox>Finddialong::Finddialong(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("Search &backward"));
findButton=new QPushButton(tr("&Find"));
findButton->autoDefault();
findButton->setEnabled(false);
closeButton = new QPushButton(tr("close"));
connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(enableFindButton(const QString &)));
connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));
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(backwardCheckBox);
LeftLayout->addWidget(caseCheckBox);
QVBoxLayout *rightLayout=new QVBoxLayout;
rightLayout->addWidget(findButton);
rightLayout->addWidget(closeButton);
rightLayout->addStretch();
QHBoxLayout *mainLayout=new QHBoxLayout;
mainLayout->addLayout(LeftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);}@
-
Then, did you try to call qmake "Run qmake" from the "Build" menu of Qt Creator ?
-
Yes :( same problem
-
Also with a "Rebuild All" ?
@#include <QtGui> << bad habit only include what you use@
-
yes I rebuild it all , if you can try the class and see what happens pls :(
also about the qtgui in the book it says include it , but what does it do ? it says it contains two files.
-
You are missing the implementation of both your slots. Once you add that you should be able to compile it.
It's called a "module include". It will include everything from the module. You don't want your compiler to go through all of that when building an application (it can be ok for a quick prototyping but that's all)
-
Oh , thanks man , I just like to compile it once in a while so i won't get lots of errors after finishing .
by the way what does the qt gui contain ?