Litkevich Yuriy |
Дата 22.2.2009, 17:02 |
|
FladeX, ошибка простая, она связана со знанием работы MOC, Цитата(FladeX @ 22.2.2009, 19:49) #include <main.moc> надо перенести после объявления и реализации класса, т.к. его еще не встречается в коде, вот MOC инезнает ничего о нем.
вот как должно быть:
test.zip ( 1.12 килобайт )
Кол-во скачиваний: 175
П.С. не делай qmake -project файл проекта уже есть, надо только: qmake make
П.П.С. я тебе неспроста говорил:
Цитата(Litkevich Yuriy @ 20.2.2009, 6:13) П.С. пока непоздно, перенеси весь класс MyWidget в отдельную пару файлов mywidget.h и mywidget.cpp, не взирая на компактность примера. от гемороя сразу бы избавился |
FladeX |
Дата 22.2.2009, 16:49 |
|
Нет.. На одном форуме вроде подсказали как надо, но все равно не до конца.. Сейчас пытаюсь доделать тот вариант. Собираю
qmake -project qmake make
Ошибки... Каждый раз разные. запутался в конец..
Код:
#include <QApplication> #include <QMainWindow> #include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QVBoxLayout> #include <main.moc>
class MyWidget : public QWidget Q_OBJECT { public: MyWidget(QWidget *parent = 0); // private: QLineEdit *x1edit; // public slots: void setValue(); };
void MyWidget::setValue() { x1edit->setText("123"); };
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QVBoxLayout *layout = new QVBoxLayout; QGridLayout *grid = new QGridLayout;
QLabel *x1label = new QLabel(tr("x1=")); QLabel *y1label = new QLabel(tr("y1=")); QLabel *x2label = new QLabel(tr("x2=")); QLabel *y2label = new QLabel(tr("y2=")); QLabel *slabel = new QLabel(tr("S="));
x1edit = new QLineEdit; QLineEdit *y1edit = new QLineEdit; QLineEdit *x2edit = new QLineEdit; QLineEdit *y2edit = new QLineEdit; QLineEdit *sedit = new QLineEdit;
QPushButton *automode = new QPushButton(tr("Auto")); QPushButton *resetmode = new QPushButton(tr("Reset")); QPushButton *gomode = new QPushButton(tr("Go!"));
grid->addWidget(x1label, 0, 0); grid->addWidget(y1label, 1, 0); grid->addWidget(x2label, 2, 0); grid->addWidget(y2label, 3, 0); grid->addWidget(slabel, 4, 0);
grid->addWidget(x1edit, 0, 1); grid->addWidget(y1edit, 1, 1); grid->addWidget(x2edit, 2, 1); grid->addWidget(y2edit, 3, 1); grid->addWidget(sedit, 4, 1);
grid->addWidget(automode, 5, 1); grid->addWidget(resetmode, 6, 1); grid->addWidget(gomode, 7, 1);
layout->addLayout(grid); setLayout(layout);
connect(resetmode, SIGNAL(clicked()), x1edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), y1edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), x2edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), y2edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), sedit, SLOT(clear()));
connect(automode, SIGNAL(clicked()), this, SLOT(setValue())); }
int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); }
Сборка и ошибки:
linux-85og:/home/fladex/Qt/Rectangle # qmake -project linux-85og:/home/fladex/Qt/Rectangle # qmake linux-85og:/home/fladex/Qt/Rectangle # make /usr/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I. -I. main.cpp -o main.moc main.cpp:0: Warning: No relevant classes found. No output generated. g++ -c -pipe -O2 -march=i586 -mtune=i686 -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/default -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include -I. -I. -I. -o main.o main.cpp main.cpp:12: error: expected `{' before ‘public’ main.cpp:12: error: expected unqualified-id before ‘public’ main.cpp:12: error: uninitialized const ‘staticMetaObject’ main.cpp:12: error: virtual outside class declaration main.cpp:12: error: non-member function ‘const QMetaObject* metaObject()’ cannot have cv-qualifier main.cpp:12: error: virtual outside class declaration main.cpp:12: error: virtual outside class declaration main.cpp:12: error: expected unqualified-id before ‘private’ main.cpp:24: error: invalid use of incomplete type ‘class MyWidget’ main.cpp:11: error: forward declaration of ‘class MyWidget’ main.cpp:29: error: invalid use of incomplete type ‘class MyWidget’ main.cpp:11: error: forward declaration of ‘class MyWidget’ main.cpp: In function ‘int main(int, char**)’: main.cpp:82: error: aggregate ‘MyWidget widget’ has incomplete type and cannot be defined make: *** [main.o] Ошибка 1
|
Litkevich Yuriy |
Дата 21.2.2009, 16:58 |
|
FladeX, ты победил свое творение или нет? |
SABROG |
Дата 20.2.2009, 23:21 |
|
Цитата(FladeX @ 20.2.2009, 18:17) Q_OBJECT добавил, main.moc тоже добавил. Не компилируется теперь. Погуглил про main.moc - как я понял это в моем случае и не нужно... Ну если не нужно, тогда объясни что ты понял.
Цитата(FladeX @ 20.2.2009, 18:17) Q_OBJECT добавил, Куда?
Цитата(FladeX @ 20.2.2009, 18:17) main.moc Куда? Как собирал?
И совсем будет замечательно, если ты запостиш сюда ошибку, которую тебе выдало, а также исходный код, который получился в итоге и набор команд, которыми ты все это добро собирал. |
FladeX |
Дата 20.2.2009, 18:17 |
|
Q_OBJECT добавил, main.moc тоже добавил. Не компилируется теперь. Погуглил про main.moc - как я понял это в моем случае и не нужно... |
Litkevich Yuriy |
Дата 20.2.2009, 17:08 |
|
Цитата(FladeX @ 20.2.2009, 17:42) Не работает. а ты все замечания учти, а потом уже пробуй |
SABROG |
Дата 20.2.2009, 15:09 |
|
Цитата(FladeX @ 20.2.2009, 14:42) Не работает. Вообще не появляется окно, хотя компилится все нормально... Читай мой пост выше про Q_OBJECT макрос и #include "main.moc" |
FladeX |
Дата 20.2.2009, 14:42 |
|
Не работает. Вообще не появляется окно, хотя компилится все нормально... |
SABROG |
Дата 20.2.2009, 14:19 |
|
Цитата(FladeX @ 20.2.2009, 14:05) На примере x1edit можете показать "как надо"? Был бы весьма признателен.
connect(automode, SIGNAL(clicked()), this, SLOT(setValue()));
|
FladeX |
Дата 20.2.2009, 14:05 |
|
Ткните плиз пальцем, где и что не так:
#include <QApplication> #include <QMainWindow> #include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QVBoxLayout>
class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); private: QVBoxLayout *layout; QGridLayout *grid; QLineEdit *x1edit; public slots: void setValue(); };
void MyWidget::setValue() { x1edit->setText("123"); };
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { //QVBoxLayout *layout = new QVBoxLayout; //QGridLayout *grid = new QGridLayout;
QLabel *x1label = new QLabel(tr("x1=")); QLabel *y1label = new QLabel(tr("y1=")); QLabel *x2label = new QLabel(tr("x2=")); QLabel *y2label = new QLabel(tr("y2=")); QLabel *slabel = new QLabel(tr("S="));
//QLineEdit *x1edit = new QLineEdit; QLineEdit *y1edit = new QLineEdit; QLineEdit *x2edit = new QLineEdit; QLineEdit *y2edit = new QLineEdit; QLineEdit *sedit = new QLineEdit;
QPushButton *automode = new QPushButton(tr("Auto")); QPushButton *resetmode = new QPushButton(tr("Reset")); QPushButton *gomode = new QPushButton(tr("Go!"));
grid->addWidget(x1label, 0, 0); grid->addWidget(y1label, 1, 0); grid->addWidget(x2label, 2, 0); grid->addWidget(y2label, 3, 0); grid->addWidget(slabel, 4, 0);
grid->addWidget(x1edit, 0, 1); grid->addWidget(y1edit, 1, 1); grid->addWidget(x2edit, 2, 1); grid->addWidget(y2edit, 3, 1); grid->addWidget(sedit, 4, 1);
grid->addWidget(automode, 5, 1); grid->addWidget(resetmode, 6, 1); grid->addWidget(gomode, 7, 1);
layout->addLayout(grid); setLayout(layout);
connect(resetmode, SIGNAL(clicked()), x1edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), y1edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), x2edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), y2edit, SLOT(clear())); connect(resetmode, SIGNAL(clicked()), sedit, SLOT(clear()));
connect(automode, SIGNAL(clicked()), x1edit, SLOT(setValue())); }
int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); }
На примере x1edit можете показать "как надо"? Был бы весьма признателен. ЗЫ. Трудно разобраться с ООП после скриптовых языков... |
Просмотр темы полностью (откроется в новом окне) |
|