Название: Рисование!!! Отправлено: Sun от Май 09, 2005, 04:07 Помогите разобраться в ошибке, не знаю как ее исправить.
Создаю свой класс, который должен рисовать прямоугольники на главном окне приложения. Описываю свойства для чтения и записи размеров этого прямоугольника. А компилятор выдает следующие ошибки: g++ -c -pipe -Wall -W -O2 -fomit-frame-pointer -pipe -march=i586 -mcpu=pentiumpro -DQT_NO_DEBUG -DQT_SHARED -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/lib/qt3//include -o main.o main.cpp In file included from main.cpp:10: Qprect.h:30:18: warning: no newline at end of file main.cpp: In function `int main(int, char**)': main.cpp:34: error: `set_X' undeclared (first use this function) main.cpp:34: error: (Each undeclared identifier is reported only once for each function it appears in.) main.cpp:35: error: `set_Y' undeclared (first use this function) main.cpp:36: error: `set_W' undeclared (first use this function) main.cpp:37: error: `set_H' undeclared (first use this function) main.cpp:42:2: warning: no newline at end of file make: *** [main.o] Ошибка 1 вот файл qprect.h: class QPainterRect : public QWidget { Q_OBJECT Q_PROPERTY( int x READ x WRITE se_tX ) Q_PROPERTY( int y READ y WRITE set_Y ) Q_PROPERTY( int w READ w WRITE set_W ) Q_PROPERTY( int h READ h WRITE set_H ) public: QPainterRect(QWidget *parent=0,char const *name=0,WFlags f=0); ~QPainterRect(); int x() {return fx;} int y() {return fy;} int w() {return fw;} int h() {return fh;} void set_X(int a); void set_Y(int b); void set_W(int c); void set_H(int d); protected: void paintEvent( QPaintEvent * ); private: int fx, fy, fw, fh; }; а вот main.cpp: int main( int argc, char **argv ) { QApplication a( argc, argv ); QSize sz; QColor clr; sz.setWidth (640); sz.setHeight (480); clr.setRgb (255, 255, 255); mw = new QWidget(0,0,0); mw->resize(sz); mw->setPalette( QPalette(clr) ); mw->show(); QWidget *prect; prect = new QPainterRect(mw,0,0); prect->set_X(10); prect->set_Y(10); prect->set_W(100); prect->set_H(100); a.setMainWidget(mw); prect->show(); return a.exec(); } Название: Re: Рисование!!! Отправлено: Hellenna от Май 09, 2005, 09:18 Цитата: "Sun" QWidget *prect; prect = new QPainterRect(mw,0,0); неправильно так делать, у тебя объект класса QPainterRect при присвоении преобразуется к классу QWidget у которого нет тех функций, которые ты определил в классе QPainterRect надо так: Код: QPainterRec *prect; Название: Рисование!!! Отправлено: Sun от Май 10, 2005, 06:18 Спасибо большое!
А как правильно описывать свойства Q_PROPERTY для чтения и записи? Есть int fx, fy, fw, fh (размеры прямоугольника). А то все попытки вылетают в ошибки :((( Название: Рисование!!! Отправлено: Sun от Май 10, 2005, 08:25 Уже разобралась :)
Название: Рисование!!! Отправлено: Sun от Май 10, 2005, 08:43 Люди добрые!!!! Подскажите как сделать так, чтобы когда рисовались 2 и более фигурок, то они не перекрывали друг друга……А то у меня получаеться что рисуется последняя.
int main( int argc, char **argv ) { QApplication a( argc, argv ); QSize sz; QColor clr; sz.setWidth (640); sz.setHeight (480); clr.setRgb (255, 255, 255); mw = new QWidget(0, 0, 0); mw->resize(sz); mw->setPalette( QPalette(clr) ); mw->show(); QPainterRect *prect1, *prect2; prect1 = new QPainterRect(mw, 0, 0); prect1->set_X(10); prect1->set_Y(10); prect1->set_W(20); prect1->set_H(20); prect2 = new QPainterRect(mw, 0, 0); prect2->set_X(30); prect2->set_Y(30); prect2->set_W(40); prect2->set_H(40); a.setMainWidget(mw); prect1->show(); prect2->show(); return a.exec(); } За ранее спасибо!!! Название: Рисование!!! Отправлено: Sun от Май 10, 2005, 08:47 и забыла еще
class QPainterRect : public QWidget Название: Рисование!!! Отправлено: Hellenna от Май 11, 2005, 15:46 Рисуются оба, только виден последний потому что объекты класса QPainterRect просто перекрывают друг дурга (по умолчанию у них выставлениы одинаковые размеры и координаты).
Вижу два пути решения проблемы: 1. Рисовать оба прямоугольника на одном компоненте 2. Задавать координаты объектов класса QPainterRect так чтобы они не перекрывали друг друга (см. QWidget::setGeometry(...)) Мне кажется что первый путь более логичный, хотя все зависит от специфики твоей задачи. :) Название: Рисование!!! Отправлено: Sun от Май 30, 2005, 18:01 Спасибочки, буду думать дальше
Название: Рисование!!! Отправлено: west от Июнь 01, 2005, 16:39 А если Вы разобрались с Q_PROPERTY , то поясните, плз, че этто такое и для чего, каюсь, ни разу не видел такой конструкции, уже иду пробовать...
Название: Рисование!!! Отправлено: Keiko от Июнь 01, 2005, 23:43 Assistant -> Index -> "Properties"
|