Свойства в общем и свойства QDateTimeEdit в частности |
Здравствуйте, гость ( Вход | Регистрация )
Свойства в общем и свойства QDateTimeEdit в частности |
S@D}{U |
15.8.2009, 23:53
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.8.2009 Пользователь №: 1003 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго всем времени суток.
У меня возникла следующая проблема: необходимо реализовать возможность отображение в виджете QDateEdit нулевой даты , т.е той для которой верно QDate().isNull(); Первым и естественным на мой взгляд решением было создать потомка который будет переопределять функции QString textFromDateTime ( const QDateTime & dateTime ) const; и void setDate(const QDate & date); В textFromDateTime добавить проверку даты на нулевое значение и при положительной проверке возвращать заданный текст заместо вызова конвертирования значения даты в текст определенного в потомке. В setDate так же сделать проверку на нулевое значение и при положительном результате изменять свойство обьекта напрямую без каких либо проверок.Так как определенная по умолчанию функция делает проверку на нулевое значение и если проверка положительна устанавливает дату в значение свойства minimumDate. Но тут и начались сложности. Например код :
приводит к довольно любопытному выводу : DATE VALUE QDate("") DATE PROP QVariant(QDate, QDate("Сб янв 1 2000") ) DATE SET true DATE PROP QVariant(QDate, QDate("Сб янв 1 2000") ) Т.е данные устанавливаются , но судя по всему устанавливаются слотом который определен в базовом классе, а не напрямую меняется значение указанного свойства. Если кто нибудь знает как можно переключить функцию изменяющую свойство обьекта на другую или хотя бы как решить данную задачу другим способом просьба поделиться |
|
|
kwisp |
16.8.2009, 0:35
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
S@D}{U |
16.8.2009, 11:48
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.8.2009 Пользователь №: 1003 Спасибо сказали: 0 раз(а) Репутация: 0 |
может в классе наследнике в макросе Q_PROPERTY написать нужную функцию. или создать новое свойство? К сожалению такой способ не срабатывает. Подозреваю потому, что не переопределенные функции продолжают использовать свойство наследника а также его функции редактирования и получения свойства. А создание нового свойства равносильно переопределению всех функций класса и переписыванию всего кода с минимальными изменениями. Овчинка не стоит выделки. С трудом вериться что разработчики Qt не предусмотрели возможность переопределения методов работы со свойствами, но в документации про ето не слово, как к примеру и про макросы Q_Q и Q_D которые широко используются в реализациях стандартных классов (ет так к слову ) |
|
|
S@D}{U |
28.8.2009, 21:30
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.8.2009 Пользователь №: 1003 Спасибо сказали: 0 раз(а) Репутация: 0 |
Если кому интересно то все оказалось довольно просто.
В большинстве стандартных обьектов используется так называемый механизм d-указателей почитать про них можно здесь.Видимо это сделано для того чтобы люди с не особо прямыми руками меньше лазали в ядро библиотеки или просто чтоб удобней было писать Сам макрос Q_PROPERTY никаких данных не создает а только описывает способ доступа к ним. В моём случае доступ к дате можно было получить так :
|
|
|
Гость_Роман_* |
11.9.2009, 21:32
Сообщение
#5
|
Гости |
К сожалению, не являюсь, пока, большим знатоком Qt...
Если вас не затруднит, приведите пожалуйста полный листинг переопределенного класса QDateEdit c пустой датой. Спасибо. |
|
|
Текстовая версия | Сейчас: 19.12.2024, 20:30 |