QVector‹int› со списком инициализаторов не работает с 3 элементами

В пользовательской модели элемента я хочу вызывать данные, измененные с некоторыми заданными ролями.

С двумя элементами в initializer-list он отлично компилируется:

emit dataChanged(index, index, QVector<int>{ Qt::CheckStateRole, Qt::DisplayRole });

Однако, когда я добавляю третий элемент в список, он терпит неудачу:

emit dataChanged(index, index, QVector<int> { Qt::CheckStateRole, Qt::DisplayRole, Qt::DecorationRole });

error C2440: '<function-style-cast>' : cannot convert from 'initializer-list' to 'QVector<int>' 
2>          No constructor could take the source type, or constructor overload resolution was ambiguous

Кажется, неважно, какие роли, любые две скомпилируются, а третья — нет. Я использую MSVC2013 и Qt 5.4.1. Я делаю что-то не так здесь?


person Nicolas Holthaus    schedule 14.09.2015    source источник


Ответы (1)


Если вы еще этого не сделали, я бы обновил ваш VS2013 до обновления 5. Особенно в обновлении 4. исправлены некоторые проблемы со списками инициализаторов. См. также этот QTBUG-39142.

Похоже, ваш компилятор пытается построить объект QVector, используя обычные конструкторы. Вы также можете убедиться, что у вас включен C++11 и определено Q_COMPILER_INITIALIZER_LISTS.

person huysentruitw    schedule 14.09.2015