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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Виджет имеющий в качестве Property другой объект со свойствамми  (Прочитано 7457 раз)
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« : Декабрь 12, 2007, 03:45 »

Пытаюсь создать виджет (для использования в QDisigner), который будет иметь свойство - другой объект, у которого также есть свойства. Например как свойство QFont у QWidget.

Есть код:

Код:
#ifndef SCALE_CONTROL_H
#define SCALE_CONTROL_H

#include <QWidget>

class CArrow : public QObject
{
Q_OBJECT;
Q_PROPERTY(QColor COLOR READ getColor WRITE setColor);
protected:
QColor m_color;
inline QColor getColor() const {return m_color;};
inline void setColor(QColor const &newColor) {m_color = newColor;};
};

class ScaleControl : public QWidget
{
Q_OBJECT;
Q_PROPERTY(CArrow arrow1 READ getArrow1 /*WRITE setArrow1*/);
public:
ScaleControl(QWidget *parent = 0);

protected:
void paintEvent(QPaintEvent *event);

CArrow m_arrow1;
inline const CArrow &getArrow1() const {return m_arrow1;};
//inline void setArrow1(const CArrow &) {};
};

#endif

Подскажите где я запутался?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Декабрь 12, 2007, 08:11 »

Пытаюсь создать виджет (для использования в QDisigner), который будет иметь свойство - другой объект, у которого также есть свойства. Например как свойство QFont у QWidget.

Есть код:

Код:
#ifndef SCALE_CONTROL_H
#define SCALE_CONTROL_H

#include <QWidget>

class CArrow : public QObject
{
Q_OBJECT;
Q_PROPERTY(QColor COLOR READ getColor WRITE setColor);
protected:
QColor m_color;
inline QColor getColor() const {return m_color;};
inline void setColor(QColor const &newColor) {m_color = newColor;};
};

class ScaleControl : public QWidget
{
Q_OBJECT;
Q_PROPERTY(CArrow arrow1 READ getArrow1 /*WRITE setArrow1*/);
public:
ScaleControl(QWidget *parent = 0);

protected:
void paintEvent(QPaintEvent *event);

CArrow m_arrow1;
inline const CArrow &getArrow1() const {return m_arrow1;};
//inline void setArrow1(const CArrow &) {};
};

#endif

Подскажите где я запутался?

Не объявил переменные для хранения значения свойства.

Дожно быть QColor COLOR вместо QColor m_color, а в другом классе CArrow arrow1 вместо CArrow m_arrow1.

Ассистент тебе поможет.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #2 : Декабрь 12, 2007, 10:24 »

поменял названия свойств хранения (не думал что это имеет значение) ошибка осталась прежняя:

/usr/include/qt4/QtCore/qobject.h:287: error: ‘QObject& QObject::operator=(const QObject&)’ is private
release/../src/ScaleControl.h:7: error: within this context

release/moc_ScaleControl.cpp:140: note: synthesized method ‘CArrow& CArrow::operator=(const CArrow&)’ first required here
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Декабрь 12, 2007, 10:26 »

Дело в том что с QColor все работает (проверял в Дизайнере), а вот когда я свой CArrow пытаюсь в качестве свойства использовать уже не компилир-ся.
Записан
Вячеслав
Гость
« Ответ #4 : Декабрь 12, 2007, 10:46 »

А оператор присваивания написать , тот который компилятор хотит ?
Он-же тебе русским английским сказал "CArrow& CArrow::operator=(const CArrow&)" нада Подмигивающий
Записан
Tonal
Гость
« Ответ #5 : Декабрь 12, 2007, 11:10 »

QObject не поддерживает копирования, о чём собственно и говорит сообщение компилятора об ошибке.
А с объектными свойствами - посмотри в ассистенте - тот же QFont или QColor не наследуются от QObject и свойств, а так же сигналов со слотами не имеют.

Если таки действительно нужен наследник QObject-а - возвращай указатель.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #6 : Декабрь 17, 2007, 17:57 »

Кто нибудь делал такое - уже запутался (с QT только разбираюсь), хочется пример аналогичный первому моему посту, но рабочий, наследник QObject не нужен.

Вообще задача такая - компонент виджет часы - у него стрелки(их то я и хотел в отдельный компонент выделить), кот. имеют собственные цвета, признак видимости и др. сейчас все работает но вместо свойств Arrow1, Arrow2, Arrow3 с соотв. подсвойствами все в кучу пришлось слить в сам компонент - неудобно. Если не получится конечно прийдется оставить так, но ведь QFont работает.

В ассистенте ничего не нашел, в исходниках QFont.cpp следующее:

Код:

class Q_GUI_EXPORT QFont
{
    Q_GADGET
    Q_ENUMS(StyleStrategy)
public:
    enum StyleHint {
        Helvetica,  SansSerif = Helvetica,
        Times,      Serif = Times,
        Courier,    TypeWriter = Courier,
        OldEnglish, Decorative = OldEnglish,
        System,
        AnyStyle
    };

    enum StyleStrategy {
        PreferDefault    = 0x0001,
        PreferBitmap     = 0x0002,
        PreferDevice     = 0x0004,
        PreferOutline    = 0x0008,
        ForceOutline     = 0x0010,
        PreferMatch      = 0x0020,
        PreferQuality    = 0x0040,
        PreferAntialias  = 0x0080,
        NoAntialias      = 0x0100,
        OpenGLCompatible = 0x0200,
        NoFontMerging    = 0x8000
    };

Что такое class Q_GUI_EXPORT, и  Q_GADGET - у меня Асистент не находит ничего...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Декабрь 17, 2007, 18:30 »

Что такое class Q_GUI_EXPORT, и  Q_GADGET - у меня Асистент не находит ничего...

Q_GUI_EXPORT - это макрос импорта\экспорта; см. qglobal.h
Q_GADGET - это макрос позвляет добавить мета-информацию в не QObject-класс; см. qobjectdefs.h
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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