Qt определяет его последнее перечисление как PREFIX_CustomBase
, чтобы пользователи-фреймворки могли расширить это перечисление с помощью пользовательских значений.Например,
enum StandardPixmap {
...
SP_MediaSeekForward,
SP_MediaSeekBackward,
SP_MediaVolume,
SP_MediaVolumeMuted,
// do not add any values below/greater than this
SP_CustomBase = 0xf0000000
};
Более того, существуют методы обратного вызова (слоты или виртуальные методы), которые вызываются с этими значениями, например,
QIcon MyCustomStyle::GetStandardPixmap( StandardPixmap ePixmap )
{
switch( ePixmap )
{
case SP_NewPixmap: return "/home/user/new_pixmap.svg";
case SP_OtherPixmap: return "/home/user/other_pixmap.svg";
}
}
Я могу использовать этот механизм двумя способами:
- Использование
#define
для определения моего нового пользовательского значениянапример, #define SP_NewPixmap (QStyle::SP_CustomBase+2)
- Использую мой собственный
enum
- но приходится кастовать каждый разНапример, enum MyPixmap { SP_NewPixmap = QStyle::SP_CustomBase+1; }
Использование #define
в стиле C и, следовательно, в C ++ не является правильным выбором.Создание отдельного перечисления заставит меня каждый раз приводить к типу перечисления Qt - тоже безобразно.
Есть ли другой способ, с немного более умным?