Возникли две проблемы:
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 затирается ячейка с выбранным элементом. Мне надо, чтобы делегат в ячейке ничего не трогал, ничего не перерисовывал. как этого добиться?