Russian Qt Forum
Ноябрь 24, 2024, 14:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странный креш програмы изза QFont::setFontFamily в ui файле  (Прочитано 3396 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Май 22, 2015, 12:12 »

Привет. Ситуация следующая: есть несколько плагинов, которые представляют собой плавающие виджеты-доки, которые прикрепляются к главному окну.\
До поры до времени все отлично работало. Но вот уже несколько дней прога падает без каких либо причин при закрытии, иногда при смене режима работы (в данном случае при выгрузке плагинов).
Три дня промучавшись нашел причину. Сделал пустой плагин док-виджет с пустой формой. Прога падает. Полез в сгеренрированный 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.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Май 22, 2015, 12:28 »

Все разобрался! Похоже таки баг. Суть в том что под линуксом я выставил шрифт Arial для некоторых виджетов. Почему то в винде даже при их наличии программа падает в сегментацию.
Если же в редакторе сбросить свойство шрифта по умолчанию (Ms Shell Dlg, Sergoe UI), то вуаля все работает как часы! Нужно как то написать эту ситуацию в Qt. Как это сделать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 22, 2015, 12:46 »

Все разобрался! Похоже таки баг. Суть в том что под линуксом я выставил шрифт Arial для некоторых виджетов. Почему то в винде даже при их наличии программа падает в сегментацию.
Если же в редакторе сбросить свойство шрифта по умолчанию (Ms Shell Dlg, Sergoe UI), то вуаля все работает как часы! Нужно как то написать эту ситуацию в Qt. Как это сделать?
Не торопитесь, именно такой баг (краш потому что Arial) маловероятен. У меня на Вындоуз это шрифт по умолчанию - все норм (правда Qt 5.3.2 - скоро обновлюсь)
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Май 22, 2015, 13:45 »

Возможно этот баг не связан именно с Arial, но он имеет быть место у меня. Потому что падение происходит в QtGui.dll.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Май 26, 2015, 18:02 »

с 5.4.1 я бы посоветовал не торопиться, она достаточно сырая. Мы пробовали ее использовать, но из-за обилия багов отказались.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Май 27, 2015, 08:54 »

это версия вышла достаточно давно.. это уже не первый случай когда у меня программа падает изза странных багов qt...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 22.