Привет. Ситуация следующая: есть несколько плагинов, которые представляют собой плавающие виджеты-доки, которые прикрепляются к главному окну.\
До поры до времени все отлично работало. Но вот уже несколько дней прога падает без каких либо причин при закрытии, иногда при смене режима работы (в данном случае при выгрузке плагинов).
Три дня промучавшись нашел причину. Сделал пустой плагин док-виджет с пустой формой. Прога падает. Полез в сгеренрированный ui.h файл и нашёл такие строки
class Ui_PositionDock
{
public:
QWidget *dockWidgetContents;
QVBoxLayout *verticalLayout;
void setupUi(QDockWidget *PositionDock)
{
if (PositionDock->objectName().isEmpty())
PositionDock->setObjectName(QStringLiteral("PositionDock"));
PositionDock->setEnabled(true);
PositionDock->resize(96, 605);
QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(PositionDock->sizePolicy().hasHeightForWidth());
PositionDock->setSizePolicy(sizePolicy);
PositionDock->setMinimumSize(QSize(96, 605));
PositionDock->setMaximumSize(QSize(96, 800));
QFont font;
font.setFamily("Arial"); //<<<<<--- без QStringLiteral работает! С ним падает (отладчик показывает на QFontEngine operator::=).
font.setPointSize(8);
PositionDock->setFont(font);
/*
PositionDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
dockWidgetContents = new QWidget();
dockWidgetContents->setObjectName(QStringLiteral("dockWidgetContents"));
verticalLayout = new QVBoxLayout(dockWidgetContents);
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
PositionDock->setWidget(dockWidgetContents);
retranslateUi(PositionDock);
QMetaObject::connectSlotsByName(PositionDock);
*/
} // setupUi
void retranslateUi(QDockWidget *PositionDock)
{
PositionDock->setWindowTitle(QApplication::translate("PositionDock", "\320\237\320\276\320\267\320\270\321\206\320\270\321\217", 0));
} // retranslateUi
};
Закоментировал даже создание как такового виджета формы, все равно был креш, пока не убрал QStringLiteral из setFont. Не знаю с чем это связано, но в остальных местах проблем не наблюдается. Кстати это падает под виндой, а в линуксе все ок. Версия 5.4.1. Кто то может объяснить с чем это все связано? Деструкторы плагина отрабатывают правильно, т.е. все объекты плагинов удаляются, утечек тоже нет, прогнал валгриндом. Похоже на какой то баг самого Qt.