Un "piccolo" problema di programmazione sotto Qt5

Dopo tanto tempo apro una nuova discussione su questo sito. Il motivo nasce da un bug che ottengo sempre nell’esecuzione di ogni programma in Qt che fa uso delle componenti che compongono Qt Designer. Una piccola nota storica: questo bug non si presentava sotto Qt4! Cerco di spiegarmi col codice sorgente:

Test4MainWindow::Test4MainWindow(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f)
{
setWindowTitle( tr(“Test4”));
resize( 600, 400);

m_mdiArea = new QMdiArea();
connect(m_mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(slotWindowAboutToShow()));
setCentralWidget( m_mdiArea);
m_signalMapper = new QSignalMapper();
connect(m_signalMapper, SIGNAL(mapped(QWidget *)), m_mdiArea, SLOT(setActiveSubWindow(QWidget *)));

QDesignerComponents::initializeResources();
m_designer = QDesignerComponents::createFormEditor( this);
QDesignerComponents::initializePlugins( m_designer);
m_designer->setTopLevel( this);

m_designer->setWidgetBox ( QDesignerComponents::createWidgetBox ( m_designer, nullptr ) );
m_designer->widgetBox()->setFileName ( QLatin1String ( ":/trolltech/widgetbox/widgetbox.xml" ) );
m_designer->widgetBox()->load();
m_designer->widgetBox()->setWindowTitle ( tr ( "Widget Box" ) );

m_designer->setPropertyEditor ( QDesignerComponents::createPropertyEditor ( m_designer, nullptr ) );
m_designer->propertyEditor()->setReadOnly ( false );
m_designer->propertyEditor()->setWindowTitle ( tr ( "Property Editor" ) );

m_designer->setObjectInspector ( QDesignerComponents::createObjectInspector ( m_designer, nullptr ) );
m_designer->objectInspector()->setWindowTitle ( tr ( "Object Inspector" ) );

m_designer->setActionEditor ( QDesignerComponents::createActionEditor ( m_designer, nullptr ) );
m_designer->actionEditor()->setWindowTitle ( tr ( "Action Editor" ) );


m_formWindowManager = m_designer->formWindowManager();

}

Qui vediamo tutti i componenti inizializzati nel costruttore e non abbiamo problemi di sorta ma quando cerchiamo di creare una maschera abbiamo un problema di segmentazione in un codice come questo:

void Test4MainWindow::slotFileNew()
{
QDesignerFormWindowInterface * m_formWindow = nullptr;
Test4MdiChildWindow * m_widget = new Test4MdiChildWindow();
m_formWindowManager->closeAllPreviews();
m_formWindow = m_formWindowManager->createFormWindow(nullptr);//TODO: here the bug!
Q_ASSERT(m_formWindow != nullptr);
m_formWindowManager->addFormWindow(m_formWindow);
m_widget->layout()->setContentsMargins(QMargins());
m_widget->layout()->addWidget(m_formWindow);
m_mdiArea->addSubWindow(m_widget);
m_widget->resize(300,300);
m_widget->setWindowIcon(QIcon::fromTheme(“qtlogo”));
m_widget->setWindowTitle(tr(“This is a test”));
m_widget->show();
}

Qualcuno potrebbe avere un idea su come risolvere questo bug? Stavo pensando di segnalarlo su Bugzilla…

A quanto pare questo è un argomento difficile. Mi consigliate di presentare il problema su BugZilla o direttamente a quelli che gestiscono le librerie Qt?

Ho capito. Passiamo la questione alle alte sfere ossia Bugzilla e segniamo questa discussione come conclusa.