Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MDI window и plugin 2
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
balbes
Всем привет, в продолжение прошлой теме с плагином и MDI окном.
Я переделал немного плагин, теперь он шлет главному окну сигнал для создния дочернего окна и в нем передает указатель на виджет.
QWidget *CMyPlugin::getSubWindow()
{
    if( !m_pWidget )
        m_pWidget = new QTableWidget();
    return m_pWidget;
}
...
QWidget *pWidget = getSubWindow();
emit createChildWindow(pWidget);
дочернее окно создается так:
void CMainWindow::createChildWindow(QWidget *pWidget)
{
    QMdiSubWindow * pSubWindow= m_pArea->addSubWindow( pWidget );
    pSubWindow->show();
}
,но есть проблема, при закрытии дочернего (только что созданного) окна, и новом открытии его приложение вылетает с ошибкой:
Цитата
The inferior stopped because it received a signal from the Operating System.
Signal name : SIGSEGV
Signal meaning : Segmentation fault


Но почему?
ViGOur
Скорее всего это из-за того, что при первом открытии ты передаешь валидный указатель на QTableWidget, а при повтороном он уничтожается, но не становится NULL так как deleteLater и прочее.
Litkevich Yuriy
Цитата(balbes @ 12.5.2015, 12:01) *
if( !m_pWidget )
Если эта функция нужна только чтобы создать виджет, то зачем ты хранишь указатель на этот виджет (m_pWidget)?


ViGOur, прав. Удалеие виджета произойдёт после возвращения в цикл обработки событий, при этом m_pWidget скорее всего у тебя нигде не обнуляется при удалении виджета. Далее попадая в функцию CMyPlugin::getSubWindow(), тест проходит успешно (новый аиджет не создаётся) но указатель уже недействительный, ... :bomb:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.