Codeblocks i qt

0

Mam problem odnośnie używania qt w codeblocksie. Ponieważ przy dodawania slotów (po wpisania makra Q_OBJECT) pojawiają się nie zidentyfikowanie jakieś referencje do vtable.

Pytanie: jak to skonfigurować

Dałem sobie na początku odpalić qmake i używanie z makefile'a. Odpaliłem i wyskoczyło, że brak reguł dla obiektu 'Debug'.

Odpaliłem z konsoli make i pojawiło się:
[quote]
tomasz@tomasz-K50IN:~/Dokumenty/prace/c/test/qt_pro$ make
g++ -c -pipe -O2 -D_REENTRANT -Wall -W -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -o main.o main.cpp
main.cpp warning: unused parameter ‘value’
g++ -Wl,-O1 -o ../../../../c/test/qt_pro/translation main.o -L/usr/lib -lQtGui -lQtCore -lpthread
main.o: In function main': main.cpp:(.text+0x49): undefined reference to vtable for myWidget'
main.cpp:(.text+0x51): undefined reference to vtable for myWidget' main.cpp:(.text+0xd5): undefined reference to vtable for myWidget'
main.cpp:(.text+0xdd): undefined reference to vtable for myWidget' main.o: In function myWidget::myWidget()':
main.cpp:(.text._ZN8myWidgetC1Ev[myWidget::myWidget()]+0x2c): undefined reference to vtable for myWidget' main.o:main.cpp:(.text._ZN8myWidgetC1Ev[myWidget::myWidget()]+0x33): more undefined references to vtable for myWidget' follow
collect2: ld returned 1 exit status
make: *** [../../../../c/test/qt_pro/translation] Błąd 1
[/quote]

Kod mojej aplikacji to:

[code]
#include <QtGui>
#include <QApplication>
#include <QFont>
#include <QPushButton>

class myWidget : protected QWidget
{

Q_OBJECT

protected:
QHBoxLayout *layout;
QLabel *label;
QLineEdit *edit;
QPushButton *button;

public slots:
    void message()
    {

    }

signals:
    void valueChanged(int value)
    {

    }

public:
myWidget ()
{
QString string("Moja pierwsza aplikacja");
layout = new QHBoxLayout();
label = new QLabel("app");
edit = new QLineEdit();
button = new QPushButton("Zamknij");
layout->addWidget (label);
layout->addWidget (edit);
layout->addWidget (button);
this->setLayout (layout);
this->setVisible(true);
this->setWindowTitle (string);
}

~myWidget ()
{
	delete label;
	delete edit;
	delete button;
	delete layout;
}

};

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
myWidget widget;
return app.exec();
}

[/code]

[code]
HEADERS =
SOURCES = main.cpp
CONFIG += qt
DESTDIR = /home/tomasz/Dokumenty/c/test/qt_pro
[/code]

0

Po includach dodaj:
#include "main.moc"
i odpal ponownie qmake i make

0

Dzięki ominęłem ten problem. Teraz mam kolejny. Ponieważ codeblocks ma coś takiego jak środowisko kompilacji Debug/Release to uruchamia mnie make z akcją Debug. A make słusznie narzeka, że nie ma akcji dla obiektu Debug. Jak to pogodzić?

0

Czy masz jakiś dobry powód żeby upierać się na tego Code::Blocks do qt? Jeśli nie to radzę skorzystać z Qt Creatora - oszczędzisz sobie wiele czasu, nerwów i zyskasz na wygodzie. Code::Blocks jest dobre do wxWidgets, do Qt nie za bardzo, bo nie obsługuje chociażby projektowania gui dla Qt.

0

Po co naprawiać linuxa? Nie lepiej sformatować dysk i zainstalować na nowo ubuntu ? Podejście typowego windowsowca (usuń, odinstaluj, zainstaluj) Ja chciałbym się nauczyć programować w każdych warunkach, nawet najsurowszych vim,g++,gcc,gdb, valgrind, make

0

W C::B jest opcja żeby używać "custom makefile". Dla Ciebie makefile może tworzyć qmake.

0

Owszem wygenerował, ale bez Debug/Release akcji

0

W C::B makefile nie musi mieć debug/release. Jaki target jest budowany sam w ustawieniach projektu możesz podać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1