Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в делегате реализовать открытие окна для редактирования
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
Анна
Хотела реализовать интерфейс, похожий на 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 затирается ячейка с выбранным элементом. Мне надо, чтобы делегат в ячейке ничего не трогал, ничего не перерисовывал. как этого добиться?
Анна
С 1), кажется, разобралась - сама функция createEditor() является const. Пойду в обход.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.