Russian Qt Forum
Апреля 30, 2025, 01:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странный креш програмы изза QFont::setFontFamily в ui файле  (Прочитано 3513 раз)
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.036 секунд. Запросов: 20.