Russian Qt Forum
Ноябрь 22, 2024, 11:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Рисование!!!
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Рисование!!! (Прочитано 12048 раз)
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();
}
Записан
Hellenna
Гость
Re: Рисование!!!
«
Ответ #1 :
Май 09, 2005, 09:18 »
Цитата: "Sun"
QWidget *prect;
prect = new QPainterRect(mw,0,0);
неправильно так делать, у тебя объект класса QPainterRect при присвоении преобразуется к классу QWidget у которого нет тех функций, которые ты определил в классе QPainterRect
надо так:
Код:
QPainterRec *prect;
prect = new QPainterRect(mw,0,0);
Записан
Sun
Гость
Рисование!!!
«
Ответ #2 :
Май 10, 2005, 06:18 »
Спасибо большое!
А как правильно описывать свойства Q_PROPERTY для чтения и записи? Есть int fx, fy, fw, fh (размеры прямоугольника). А то все попытки вылетают в ошибки
((
Записан
Sun
Гость
Рисование!!!
«
Ответ #3 :
Май 10, 2005, 08:25 »
Уже разобралась
Записан
Sun
Гость
Рисование!!!
«
Ответ #4 :
Май 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
Гость
Рисование!!!
«
Ответ #5 :
Май 10, 2005, 08:47 »
и забыла еще
class QPainterRect : public QWidget
Записан
Hellenna
Гость
Рисование!!!
«
Ответ #6 :
Май 11, 2005, 15:46 »
Рисуются оба, только виден последний потому что объекты класса QPainterRect просто перекрывают друг дурга (по умолчанию у них выставлениы одинаковые размеры и координаты).
Вижу два пути решения проблемы:
1. Рисовать оба прямоугольника на одном компоненте
2. Задавать координаты объектов класса QPainterRect так чтобы они не перекрывали друг друга (см. QWidget::setGeometry(...))
Мне кажется что первый путь более логичный, хотя все зависит от специфики твоей задачи.
Записан
Sun
Гость
Рисование!!!
«
Ответ #7 :
Май 30, 2005, 18:01 »
Спасибочки, буду думать дальше
Записан
west
Гость
Рисование!!!
«
Ответ #8 :
Июнь 01, 2005, 16:39 »
А если Вы разобрались с Q_PROPERTY , то поясните, плз, че этто такое и для чего, каюсь, ни разу не видел такой конструкции, уже иду пробовать...
Записан
Keiko
Гость
Рисование!!!
«
Ответ #9 :
Июнь 01, 2005, 23:43 »
Assistant -> Index -> "Properties"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...