void QgsPropertyOverrideButton::showAssistant() { //first step - try to convert any existing expression to a transformer if one doesn't //already exist if ( !mProperty.transformer() ) { ( void )mProperty.convertToTransformer(); } QgsPanelWidget *panel = QgsPanelWidget::findParentPanel( this ); QgsPropertyAssistantWidget *widget = new QgsPropertyAssistantWidget( panel, mDefinition, mProperty, mVectorLayer ); widget->registerExpressionContextGenerator( mExpressionContextGenerator ); widget->setSymbol( mSymbol ); // we only show legend preview in dialog version if ( panel && panel->dockMode() ) { connect( widget, &QgsPropertyAssistantWidget::widgetChanged, this, [this, widget] { widget->updateProperty( this->mProperty ); mExpressionString = this->mProperty.asExpression(); mFieldName = this->mProperty.field(); updateSiblingWidgets( isActive() ); this->emit changed(); } ); connect( widget, &QgsPropertyAssistantWidget::panelAccepted, this, [ = ] { updateGui(); } ); panel->openPanel( widget ); return; } else { // Show the dialog version if not in a panel QDialog *dlg = new QDialog( this ); QString key = QStringLiteral( "/UI/paneldialog/%1" ).arg( widget->panelTitle() ); QgsSettings settings; dlg->restoreGeometry( settings.value( key ).toByteArray() ); dlg->setWindowTitle( widget->panelTitle() ); dlg->setLayout( new QVBoxLayout() ); dlg->layout()->addWidget( widget ); QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok ); connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept ); connect( buttonBox, &QDialogButtonBox::rejected, dlg, &QDialog::reject ); connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsPropertyOverrideButton::showHelp ); dlg->layout()->addWidget( buttonBox ); if ( dlg->exec() == QDialog::Accepted ) { widget->updateProperty( mProperty ); mExpressionString = mProperty.asExpression(); mFieldName = mProperty.field(); widget->acceptPanel(); updateSiblingWidgets( isActive() ); updateGui(); emit changed(); } settings.setValue( key, dlg->saveGeometry() ); } }
QString RscViewer::selectKey(const QString &rscName, int localFilter) { QDialog d; d.setWindowTitle("Выбор знака"); QPushButton pbOk("Готово"); QPushButton pbCancel("Отмена"); RscViewer view; view.setRsc(rscName); view.setLocalFilter(localFilter); if(localFilter >= 0) { view.hideFilter(); } connect(&pbOk, SIGNAL(clicked()), &d, SLOT(accept())); connect(&view, SIGNAL(signSelected()), &d, SLOT(accept())); connect(&pbCancel, SIGNAL(clicked()), &d, SLOT(reject())); QVBoxLayout *main = new QVBoxLayout(&d); main->addWidget( &view ); QHBoxLayout *btnlay = new QHBoxLayout(); btnlay->addStretch(); btnlay->addWidget( &pbOk ); btnlay->addWidget( &pbCancel ); main->addLayout(btnlay); QSettings set(qApp->organizationName(), qApp->applicationName()); d.restoreGeometry( set.value("rscviewer_geometry").toByteArray() ); bool ok = d.exec(); set.setValue("rscviewer_geometry", d.saveGeometry() ); if(!ok) { return 0; } return view.selectedSignKey(); }