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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Работа с QCalendarWidget в QItemDelegate  (Прочитано 5589 раз)
Nemo2000
Гость
« : Ноября 18, 2010, 20:36 »

Доброго времени суток=)
У меня есть таблица QTableWidget. Для её ячеек я создаю делегат ItemComboDateDelegate, чтобы редактировать ячейки с помощью календаря QCalendarWidget.

Код файла itemcombodatedelegate.cpp
Код:
#include "itemcombodatedelegate.h"
#include <QComboBox>
#include <QDebug>
#include <QCheckBox>
#include <QCalendarWidget>

ItemComboDateDelegate::ItemComboDateDelegate(QObject *parent) :
    QItemDelegate(parent)
{
}
QWidget *ItemComboDateDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                                      const QModelIndex &index) const
{
    qDebug()<<"createEditor";
    QCalendarWidget *calendar=new QCalendarWidget(parent);
    return calendar;
}

void ItemComboDateDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
                                           const QModelIndex &index) const
{
    qDebug()<<"setGeometry";
}

void ItemComboDateDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    qDebug()<<"setModelData";
    QCalendarWidget *calendar = static_cast<QCalendarWidget*>(editor);
    QDate value = calendar->selectedDate();
    model->setData(index,value,Qt::EditRole);
}

Мне нужно чтобы при клике на календарь, он тут же исчезал и нужное значение записывалось в ячейку.
У меня же это происходит только когда я кликаю по другой ячейке таблицы.

Я так понимаю что надо как-то отлавливать событие клика по календарю и в нём уже делать всё что нужно??словить клик, я могу, но как реализовать остальное?
Помогите, пожалуйста=)
« Последнее редактирование: Ноября 20, 2010, 14:12 от _Nemo_ » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #1 : Ноября 18, 2010, 20:38 »

Соедини его сигнал void   activated ( const QDate & date ) с его же слотом close и будет тебе счастье. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Nemo2000
Гость
« Ответ #2 : Ноября 18, 2010, 20:47 »

Я вот тоже думал так сделать,но почему-то такого слота там нету..  Непонимающий
есть только deleteLater() и helpEvent(); Злой
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #3 : Ноября 18, 2010, 20:50 »

QCalendarWidget наследуется от QWidget, у которого есть слот bool QWidget::close () [slot]. Так что ты что-то путаешь.
Записан

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

Да, я действительно опять напутал:)
Я в connect() третьим параметром указывал this, тоесть класс моего делегата.
А надо было указать мой календарь Улыбающийся
Спасибо,что наставили на путь истинный Смеющийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5877


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


Просмотр профиля WWW
« Ответ #5 : Ноября 18, 2010, 21:03 »

Улыбающийся Бывает.
Я вчера часа полтора искал баг в своей проге, оказалось, что ошибка в скобках. Написал new char (10) вместо new char [10]. Иногда бывает и похуже.  Смеющийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Nemo2000
Гость
« Ответ #6 : Ноября 19, 2010, 13:25 »

Тогда ещё вопрос.
Как можно настроить положение этого календаря,чтобы он появлялся под ячейкой, ну или где-то возле неё.
По умолчанию его положение 0,0 в кординатах таблицы.
В функции UpdateEditorGeometry есть параметр option ,но с помощью него можно достать координаты таблицы,а не отдельной ячейки.
Записан
Kolobok
Гость
« Ответ #7 : Ноября 19, 2010, 14:15 »

QStyleOption::rect это координаты ячейки.
Записан
crossly
Гость
« Ответ #8 : Ноября 19, 2010, 14:33 »

а может лучше было бы использовать QDateEdit с setCalendarPopup(true).... не ??
Записан
Nemo2000
Гость
« Ответ #9 : Ноября 19, 2010, 23:03 »

crossly, да это именно то что нужно Улыбающийся
Я просто незнал про такой виджет. Спасибо всем))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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