Russian Qt Forum
Май 06, 2024, 02:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование!!!  (Прочитано 11822 раз)
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
Гость
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 20.