Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pokidoff от Июнь 30, 2011, 14:36



Название: Написать виджет CheckBox + QDateEdit
Отправлено: pokidoff от Июнь 30, 2011, 14:36
Необходимо написать виджет, унаследованный от QDateEdit с нарисованным чекбоксом. Это нужно для использования совместно с БД: если поле NULL - галку снимаем, dateEdit->setEnabled(false), ну и наоборот. Начнем с того, как нарисовать чекбокс?


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: Пантер от Июнь 30, 2011, 14:40
В Qxt глянь. Кажись, там было.


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: pokidoff от Июнь 30, 2011, 14:57
К сожалению там нет. Хотя библиотека шикарная... Вопрос остался


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: SimpleSunny от Июнь 30, 2011, 17:21
Когда-то давно делал так.
Писал свой виджет, в нем размещал рядом стд. чекбокс без текста и стд. датаедит.
И функции необходимые от них выносил наружу.


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: pokidoff от Июнь 30, 2011, 21:14
Да, я так сейчас и сделал - положил на виджет чекбокс и редактор даты. Фактически заменил тип данных, обрабатываемый виджетом, с QDate на QVariant ибо этот тип поддерживает NULL. Вроде пока устраивает. С маппером работает нормально.


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: LisandreL от Июль 01, 2011, 07:09
Фактически заменил тип данных, обрабатываемый виджетом, с QDate на QVariant ибо этот тип поддерживает NULL.
Вы так говорите, как будто QDate NULL не поддерживает: QDate::isNull().


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: pokidoff от Июль 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


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: Пантер от Июль 01, 2011, 09:03
Ну да, оказалось, что поддерживает. Только... чтобы установить дату в NULL мне надо установить дату раньше 2 января 4713 г до нашей эры.
Нафига? QDate () изначально есть NULL.


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: pokidoff от Июль 01, 2011, 16:23
Ну да, оказалось, что поддерживает. Только... чтобы установить дату в NULL мне надо установить дату раньше 2 января 4713 г до нашей эры.
Нафига? QDate () изначально есть NULL.
Нормально? А если в ячейке в таблице у меня NULL? Как себя QDate поведёт? А если мне надо установить значение NULL, что делать?


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: Пантер от Июль 01, 2011, 16:26
Код
C++ (Qt)
QDate date = QDate::currentDate ();
..................
date = QDate (); //date.isNull () == true;
 


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: kolob от Октябрь 27, 2011, 09:04
Попробовал реализовать такой виджет, наследую QDateEdit вставляю туда QCheckBox, но внутренние элементы не смещаются. CheckBox на месте дня недели находится.
(http://xmages.net/storage/10/1/0/3/5/upload/7d6d12ed.png) (http://xmages.net/i/3177670)


Название: Re: Написать виджет CheckBox + QDateEdit
Отправлено: kolob от Ноябрь 29, 2011, 23:33
Разместил CheckBox в лайауте. Добалвил для текста отступ. Теперь смотрится нормально. Дата сместилась вправо. При изменении размеров тоже ведет себя нормально. Только вот теперь когда наводишь мишью на дату, курсор не меняется(курсор для редактирования). Я думаю дело в лайауте, который растянулся на весь виджет.