Столкнулся со странным багом.
Есть модель, в ней описано перечисление
class CObjectInspectorTreeModel : public QAbstractItemModel, public CUndoStackInterface
{
Q_OBJECT
public:
enum PropertyMode {pmAll,pmThisOnly,pmDesignableAll,pmDesignableThisOnly};
private:
PropertyMode fmode;
public slots:
void setMode(PropertyMode Mode);
};
Есть плагин в виде библиотеки DLL.
Ниже код инициализации объекта в плагине
ObjInspector::ObjInspector(QWidget *parent) :
QDockWidget(parent),CUndoStackInterface(),
ui(new Ui::ObjInspector)
{
ui->setupUi(this);
setObjectName("object_inspector_dock");
ftreeModel = new CObjectInspectorTreeModel(this);
ftreeDelegate = new CObjectInspectorTreeDelegate(this);
ftreeDelegate->setModel(ftreeModel);
ui->treeView->setModel(ftreeModel);
ui->treeView->setItemDelegateForColumn(0,new CReadOnlyDelegate(this));
ui->treeView->setItemDelegateForColumn(1,ftreeDelegate);
factions = new QActionGroup(this);
factions->setExclusive(true);
QAction * contextAction;
contextAction = new QAction(trUtf8("DESIGNABLE свойства"),factions);
contextAction->setCheckable(true);
contextAction->setData(QVariant::fromValue(CObjectInspectorTreeModel::pmDesignableAll));
contextAction->setChecked(true);
connect(contextAction,SIGNAL(triggered()),this,SLOT(setPropertyMode()));
contextAction = new QAction(trUtf8("DESIGNABLE свойства только ЭТОГО объекта"),factions);
contextAction->setCheckable(true);
contextAction->setData(QVariant::fromValue(CObjectInspectorTreeModel::pmDesignableThisOnly));
connect(contextAction,SIGNAL(triggered()),this,SLOT(setPropertyMode()));
contextAction = new QAction(trUtf8("Все свойства"),factions);
contextAction->setCheckable(true);
contextAction->setData(QVariant::fromValue(CObjectInspectorTreeModel::pmAll));
connect(contextAction,SIGNAL(triggered()),this,SLOT(setPropertyMode()));
contextAction = new QAction(trUtf8("Все свойства только ЭТОГО объекта"),factions);
contextAction->setCheckable(true);
contextAction->setData(QVariant::fromValue(CObjectInspectorTreeModel::pmThisOnly));
connect(contextAction,SIGNAL(triggered()),this,SLOT(setPropertyMode()));
ui->treeView->addActions(factions->actions());
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
}
void ObjInspector::setPropertyMode()
{
QAction * action = qobject_cast<QAction*>(sender());
Q_ASSERT(action);
CObjectInspectorTreeModel::PropertyMode mode = action->data().value<CObjectInspectorTreeModel::PropertyMode>();
ftreeModel->setMode(mode);
}
Это простой инспектор объектов. Плагин представляет собой ДокВиджет, в котором расчположен QTableView.
Вот для этого tableView нужно создать контекстное меню. Все создается и работает в первый раз после запуска программы.
Но стоит выгрузить плагин, а потом загрузить еще раз, то получаю сегментацию на
contextAction->setData(QVariant::fromValue(CObjectInspectorTreeModel::pmDesignableAll));
Работало долго и нудно, а сегодня вылез баг и хоть убей не пойму что не так. При отладке залазит далеко вглубь QVariant.