crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как в делегате реализовать открытие окна для редактирования, именно окна, которое не будет "портиться" при окончании редакт
Анна
  опции профиля:
сообщение 21.3.2014, 13:29
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Хотела реализовать интерфейс, похожий на MSVS: Список структур с данными, отображенный в QTreeView, при двойном щелчке на элементе создаётся окно в QMdiArea для редактирования структуры. Если окно для элемента списка уже создано, то оно становится активным.
Возникли две проблемы:
1. Для отслеживания, какие окна уже созданы, хотела использовать в делегате QMap<void*, QWidget*>, первый параметр указатель на структуру, второй параметр - окно QMdiSubWindow.

QWidget* TreeDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
    void* data = index.data(Project::PtrRole).value<void*>(); // получаю указатель на структуру из индекса в модели
    QMdiSubWindow *win;
    if(!editors.contains(data))
    {
        QWidget *widget = new DataWidget(data);
        win =mdiArea->addSubWindow(widget);
        editors.insert( data, win); // <<<------ в этом месте ругается: c2662 'QMap<Key,T>' невозможно преобразовать указатель 'this' из 'const QMap<Key,T>' в 'QMap<Key,T>&'...
        return win;
    }
    else
    {
        win = dynamic_cast<QMdiSubWindow *>(editors.value(data));
        win->show();
        return win;
    }
}

Я так понимаю, что QMap не хочет в качестве ключа брать указатель, который не const, так как в insert оба параметра const. Пробовала явно приводить к const, не помогло. Я вообще с QMap никогда не имела дела, что делаю не так , не понимаю.

2. Если не связываться с QMap, а в делегате открывать диалог для редактирования, то в QTreeView затирается ячейка с выбранным элементом. Мне надо, чтобы делегат в ячейке ничего не трогал, ничего не перерисовывал. как этого добиться?

Сообщение отредактировал Анна - 21.3.2014, 14:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 21.3.2014, 14:58
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


С 1), кажется, разобралась - сама функция createEditor() является const. Пойду в обход.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 18:52