PDA

View Full Version : Custom Widget Plugin Analog Clock



kemp
11th August 2006, 09:03
Hi!

When i create a form and add custom widget example analogclock or any other custom widget on it, make a project with this form and compile it, it says:

fatal error C1083: Cannot open include file: 'analogclock.h'

Where is the problem?
How can i use custom widgets in my application?
I am using Qt 4.1.4 and VS integration 1.1.3.

Thanks.

jacek
11th August 2006, 11:40
Make sure that %QTDIR%\examples\designer\customwidgetplugin is in your includes path.

kemp
11th August 2006, 12:15
Thank you for your answer. Now it says:


Error 1 error LNK2019: unresolved external symbol "public: __thiscall AnalogClock::AnalogClock(class QWidget *)" (??0AnalogClock@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_Dialog::setupUi(class QDialog *)" (?setupUi@Ui_Dialog@@QAEXPAVQDialog@@@Z) main.obj
Error 2 fatal error LNK1120: 1 unresolved externals debug\pp.exe


My code is:


main.cpp


#include <QApplication>
#include <QDialog>
#include "ui_form.h"

int main(int argc,char *argv[])
{
QApplication app(argc, argv);
Ui::Dialog ui;

QDialog *dialog = new QDialog;

ui.setupUi(dialog);
dialog->show();

return app.exec();
}


ui_form.h



#ifndef UI_FORM_H
#define UI_FORM_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include "analogclock.h"

class Ui_Dialog
{
public:
AnalogClock *analogClock;

void setupUi(QDialog *Dialog)
{
Dialog->setObjectName(QString::fromUtf8("Dialog"));
Dialog->resize(QSize(400, 300).expandedTo(Dialog->minimumSizeHint()));
analogClock = new AnalogClock(Dialog);
analogClock->setObjectName(QString::fromUtf8("analogClock"));
analogClock->setGeometry(QRect(170, 140, 100, 100));
retranslateUi(Dialog);

QMetaObject::connectSlotsByName(Dialog);
} // setupUi

void retranslateUi(QDialog *Dialog)
{
Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8));
analogClock->setToolTip(QApplication::translate("Dialog", "The current time", 0, QApplication::UnicodeUTF8));
analogClock->setWhatsThis(QApplication::translate("Dialog", "The analog clock widget displays the current time.", 0, QApplication::UnicodeUTF8));
Q_UNUSED(Dialog);
} // retranslateUi

};

namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui

#endif // UI_FORM_H

jacek
11th August 2006, 12:47
You didn't link your program with AnalogClock's code.

kemp
11th August 2006, 13:00
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall AnalogClock::AnalogClock(class QWidget *)" (__imp_??0AnalogClock@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_Dialog::setupUi(class QDialog *)" (?setupUi@Ui_Dialog@@QAEXPAVQDialog@@@Z) main.obj
Error 2 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall AnalogClock::metaObject(void)const " (?metaObject@AnalogClock@@UBEPBUQMetaObject@@XZ) main.obj
Error 3 error LNK2001: unresolved external symbol "public: virtual void * __thiscall AnalogClock::qt_metacast(char const *)" (?qt_metacast@AnalogClock@@UAEPAXPBD@Z) main.obj
Error 4 error LNK2001: unresolved external symbol "public: virtual int __thiscall AnalogClock::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@AnalogClock@@UAEHW4Call@QMetaObject@ @HPAPAX@Z) main.obj
Error 5 error LNK2001: unresolved external symbol "protected: virtual void __thiscall AnalogClock::paintEvent(class QPaintEvent *)" (?paintEvent@AnalogClock@@MAEXPAVQPaintEvent@@@Z) main.obj



my *.pro file

TEMPLATE = app
TARGET +=
DEPENDPATH += .
INCLUDEPATH += C:\Qt\4.1.4\examples\designer\customwidgetplugin



# Input
FORMS += form.ui
SOURCES += main.cpp

jacek
11th August 2006, 13:04
Try:
TEMPLATE = app
TARGET +=
DEPENDPATH += .
INCLUDEPATH += C:\Qt\4.1.4\examples\designer\customwidgetplugin
LIBS += -LC:\Qt\4.1.4\plugins\designer\ -lcustomwidgetplugin
# Input
FORMS += form.ui
SOURCES += main.cpp

kemp
11th August 2006, 13:11
Now it builds fine, but when i run the application it says:
cannot find customwidgetplugin.dll

jacek
11th August 2006, 13:14
You must copy that DLL to the same directory where your executable is.

kemp
11th August 2006, 13:22
Thank you very much, now it works fine.