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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Крашится при завершении программы.  (Прочитано 3208 раз)
nvek
Гость
« : Январь 23, 2019, 11:28 »

Сделал диалог (QDialog) cинглтоном.. без передачи парента главной формы. Может быть в этом дело, может нет, не знаю.
Но комбобокс ведет себя немного странно. Если нажать на него, чтобы выпал список. Потом закрыть диалог, закрыть приложение. То программа крашится.
По колстеку показывает что именно при разрушении этого самого диалога. ЕСЛИ НЕ НАЖИМАТЬ чтобы не выпадал список, тоесть открыть диалог, закрыть диалог, закрыть приложение все нормально

Код:

        qwindowsd.dll!QScopedPointer<QWindowsContextPrivate,QScopedPointerDeleter<QWindowsContextPrivate> >::operator->()Строка 118 C++
  qwindowsd.dll!QWindowsContext::windowUnderMouse()Строка 700 C++
  qwindowsd.dll!QWindowsWindow::destroyWindow()Строка 1154 C++
  qwindowsd.dll!QWindowsWindow::~QWindowsWindow()Строка 1124 C++
  qwindowsd.dll!QWindowsWindow::`scalar deleting destructor'(unsigned int) C++
  Qt5Guid.dll!QWindow::destroy()Строка 1705 C++
  Qt5Widgetsd.dll!QWidgetPrivate::deleteTLSysExtra()Строка 1910 C++
  Qt5Widgetsd.dll!QWidget::destroy(bool destroyWindow, bool destroySubWindows)Строка 12348 C++
  Qt5Widgetsd.dll!QWidget::~QWidget()Строка 1703 C++
  Qt5Widgetsd.dll!QFrame::~QFrame()Строка 264 C++
  Qt5Widgetsd.dll!QComboBoxPrivateContainer::~QComboBoxPrivateContainer() C++
  Qt5Widgetsd.dll!QComboBoxPrivateContainer::`scalar deleting destructor'(unsigned int) C++
  Qt5Cored.dll!QObjectPrivate::deleteChildren()Строка 1970 C++
  Qt5Widgetsd.dll!QWidget::~QWidget()Строка 1696 C++
  Qt5Widgetsd.dll!QComboBox::~QComboBox()Строка 1349 C++
  ViewMBTCP.dll!QComboBox::`scalar deleting destructor'(unsigned int) C++
  Qt5Cored.dll!QObjectPrivate::deleteChildren()Строка 1970 C++
  Qt5Widgetsd.dll!QWidget::~QWidget()Строка 1696 C++
  ViewMBTCP.dll!QWidget::`scalar deleting destructor'(unsigned int) C++
  Qt5Cored.dll!QObjectPrivate::deleteChildren()Строка 1970 C++
  Qt5Widgetsd.dll!QWidget::~QWidget()Строка 1696 C++
  Qt5Widgetsd.dll!QGroupBox::~QGroupBox()Строка 210 C++
  ViewMBTCP.dll!QGroupBox::`scalar deleting destructor'(unsigned int) C++
  Qt5Cored.dll!QObjectPrivate::deleteChildren()Строка 1970 C++
  Qt5Widgetsd.dll!QWidget::~QWidget()Строка 1696 C++
  Qt5Widgetsd.dll!QDialog::~QDialog()Строка 361 C++

//конструктор
Код:
SearchForm::SearchForm(QWidget *parent) :
m_isFilterSet(false),
m_searchDirection(SD_FROM_END)
{
ui.setupUi(this);

ui.label->setText("Record type:");
ui.label_2->setText("Text:");
ui.label_3->setText("Direction:");

ui.groupBox->setTitle("Search conditions");

ui.btnSearch->setText("Search");
ui.btnCancel->setText("Cancel");

ui.cmbType->addItem(QString::fromStdString(S_Any));
...
ui.cmbType->addItem(QString::fromStdString(MsgTypeTrapStart));
ui.cmbType->addItem(QString::fromStdString(MsgTypeTrapStop));
ui.cmbType->addItem(QString::fromStdString(MsgTypeTrapReceived));

ui.cmbType->setCurrentIndex(1);

QStringList list;//{ Resource::DLG_SearchAllDown, Resource::DLG_SearchAllTop, Resource::DLG_SearchFromTop, Resource::DLG_SearchFromDown };
list.push_back(QString::fromStdString(DLG_SearchAllDown));
list.push_back(QString::fromStdString(DLG_SearchAllTop));
list.push_back(QString::fromStdString(DLG_SearchFromTop));
list.push_back(QString::fromStdString(DLG_SearchFromDown));

ui.cmbDirection->addItems(list);

ui.cmbText->setEditable(true);

connect(ui.btnSearch, &QPushButton::clicked, this, &SearchForm::findButtonClick);
connect(ui.btnCancel, &QPushButton::clicked, this, &QDialog::close);
}

// вот так открываю
Код:
bool SearchForm::execute()
{
loadFilter();
if (exec() == QDialog::Accepted)
{
m_isFilterSet = true;
return true;
}

return false;
}


Записан
nvek
Гость
« Ответ #1 : Январь 23, 2019, 14:34 »

Проблема в том, что плагин, завершал работу после того как прошел exec после того как отработал qpplication
и не мог разрушить диалоговые окна
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #2 : Январь 23, 2019, 16:59 »

Виджеты надо удалять до QApplication, такой wontfix косяк есть в багтрекере (нельзя повесить виджет как дитё QApplication).
Плагины надо выгружать аккуратно (или не выгружать совсем, сами кутешники не осилили сделать выгрузку из-за богомерзких строковых литералов) - нельзя использовать память выделенную плагиным после его выгрузки.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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