QVariant QAxWidgetPropertySheet::property(int index) const { // QTBUG-34592, accessing the 'control' property via meta object system // may cause crashes during loading for some controls. return propertyName(index) == m_controlProperty ? QVariant(axWidget()->control()) : QDesignerPropertySheet::property(index); }
QAxWidgetPropertySheet::QAxWidgetPropertySheet(QDesignerAxWidget *object, QObject *parent) : QDesignerPropertySheet(object, parent), m_controlProperty(controlPropertyName), m_propertyGroup(QLatin1String("QAxWidget")) { if (!axWidget()->loaded()) { // For some obscure reason.... const int controlIndex = QDesignerPropertySheet::indexOf(m_controlProperty); setPropertyGroup(controlIndex, m_propertyGroup); } }
// Reload as the meta object changes. bool QAxWidgetPropertySheet::reset(int index) { const QString name = propertyName(index); QMap<QString, QVariant>::iterator it = m_currentProperties.changedProperties.find(name); if (it != m_currentProperties.changedProperties.end()) m_currentProperties.changedProperties.erase(it); if (name != m_controlProperty) return QDesignerPropertySheet::reset(index); axWidget()->resetControl(); QTimer::singleShot(0, this, SLOT(updatePropertySheet())); return true; }
void QAxWidgetPropertySheet::updatePropertySheet() { // refresh the property sheet (we are deleting m_currentProperties) struct SavedProperties tmp = m_currentProperties; QDesignerAxWidget *axw = axWidget(); QDesignerFormWindowInterface *formWin = QDesignerFormWindowInterface::findFormWindow(axw); Q_ASSERT(formWin != 0); tmp.widget = axw; tmp.clsid = axw->control(); // Delete the sheets as they cache the meta object and other information delete this; delete qt_extension<QDesignerMemberSheetExtension *>(formWin->core()->extensionManager(), axw); reloadPropertySheet(tmp, formWin); }
void QAxWidgetPropertySheet::setProperty(int index, const QVariant &value) { // take care of all changed properties const QString name = propertyName(index); m_currentProperties.changedProperties[name] = value; if (name != m_controlProperty) { QDesignerPropertySheet::setProperty(index, value); return; } // Loading forms: Reload if (name == m_controlProperty) { const QString clsid = value.toString(); if (clsid.isEmpty() || !axWidget()->loadControl(clsid)) reset(index); else QTimer::singleShot(100, this, SLOT(updatePropertySheet())); } }