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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Написать виджет CheckBox + QDateEdit  (Прочитано 6852 раз)
pokidoff
Гость
« : Июнь 30, 2011, 14:36 »

Необходимо написать виджет, унаследованный от QDateEdit с нарисованным чекбоксом. Это нужно для использования совместно с БД: если поле NULL - галку снимаем, dateEdit->setEnabled(false), ну и наоборот. Начнем с того, как нарисовать чекбокс?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июнь 30, 2011, 14:40 »

В Qxt глянь. Кажись, там было.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pokidoff
Гость
« Ответ #2 : Июнь 30, 2011, 14:57 »

К сожалению там нет. Хотя библиотека шикарная... Вопрос остался
Записан
SimpleSunny
Гость
« Ответ #3 : Июнь 30, 2011, 17:21 »

Когда-то давно делал так.
Писал свой виджет, в нем размещал рядом стд. чекбокс без текста и стд. датаедит.
И функции необходимые от них выносил наружу.
Записан
pokidoff
Гость
« Ответ #4 : Июнь 30, 2011, 21:14 »

Да, я так сейчас и сделал - положил на виджет чекбокс и редактор даты. Фактически заменил тип данных, обрабатываемый виджетом, с QDate на QVariant ибо этот тип поддерживает NULL. Вроде пока устраивает. С маппером работает нормально.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #5 : Июль 01, 2011, 07:09 »

Фактически заменил тип данных, обрабатываемый виджетом, с QDate на QVariant ибо этот тип поддерживает NULL.
Вы так говорите, как будто QDate NULL не поддерживает: QDate::isNull().
Записан
pokidoff
Гость
« Ответ #6 : Июль 01, 2011, 07:43 »

 Ну да, оказалось, что поддерживает. Только... чтобы установить дату в NULL мне надо установить дату раньше 2 января 4713 г до нашей эры.
Цитировать
bool QDate::setDate ( int year, int month, int day )
Sets the date's year, month, and day. Returns true if the date is valid; otherwise returns false.
If the specified date is invalid, the QDate object is set to be invalid. Any date before 2 January 4713 B.C. is considered invalid.
This function was introduced in Qt 4.2.
, а с QVariant можно сделать так:
Код
C++ (Qt)
QVariant QNullableDateEdit::value(){
   if(!ui->checkBox->isChecked()) return QVariant(QVariant::Date);
 
   QVariant result = ui->dateEdit->date();
 
   return result;
}
 

Тем более, что при работе с базой мне и нужен Qvariant
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Июль 01, 2011, 09:03 »

Ну да, оказалось, что поддерживает. Только... чтобы установить дату в NULL мне надо установить дату раньше 2 января 4713 г до нашей эры.
Нафига? QDate () изначально есть NULL.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pokidoff
Гость
« Ответ #8 : Июль 01, 2011, 16:23 »

Ну да, оказалось, что поддерживает. Только... чтобы установить дату в NULL мне надо установить дату раньше 2 января 4713 г до нашей эры.
Нафига? QDate () изначально есть NULL.
Нормально? А если в ячейке в таблице у меня NULL? Как себя QDate поведёт? А если мне надо установить значение NULL, что делать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Июль 01, 2011, 16:26 »

Код
C++ (Qt)
QDate date = QDate::currentDate ();
..................
date = QDate (); //date.isNull () == true;
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #10 : Октябрь 27, 2011, 09:04 »

Попробовал реализовать такой виджет, наследую QDateEdit вставляю туда QCheckBox, но внутренние элементы не смещаются. CheckBox на месте дня недели находится.
Записан

Qt 5.11.0, Win, MinGW
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #11 : Ноябрь 29, 2011, 23:33 »

Разместил CheckBox в лайауте. Добалвил для текста отступ. Теперь смотрится нормально. Дата сместилась вправо. При изменении размеров тоже ведет себя нормально. Только вот теперь когда наводишь мишью на дату, курсор не меняется(курсор для редактирования). Я думаю дело в лайауте, который растянулся на весь виджет.
Записан

Qt 5.11.0, Win, MinGW
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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