[rkward/frameworks] /: To avoid danger of runtime errors in case a signal is hidden by a differnt function of the same name in a derived class,

Thomas Friedrichsmeier thomas.friedrichsmeier at ruhr-uni-bochum.de
Thu Nov 26 12:41:36 UTC 2015


Git commit 42fae40b1bf68b9f18739b8b9b456eed5fdf5ffe by Thomas Friedrichsmeier.
Committed on 26/11/2015 at 12:35.
Pushed by tfry into branch 'frameworks'.

To avoid danger of runtime errors in case a signal is hidden by a differnt function of the same name in a derived class,
make sure to use the base classes of signals, where appropriate (at least for our own classes).

M  +4    -0    TODO
M  +1    -1    rkward/dataeditor/twintablemember.cpp
M  +1    -1    rkward/dialogs/rkimportdialog.cpp
M  +1    -1    rkward/dialogs/rkloadlibsdialog.cpp
M  +1    -1    rkward/dialogs/rkrecoverdialog.cpp
M  +5    -5    rkward/misc/rkaccordiontable.cpp
M  +1    -1    rkward/misc/rkobjectlistview.cpp
M  +2    -2    rkward/misc/rkprogresscontrol.cpp
M  +1    -1    rkward/misc/rksaveobjectchooser.cpp
M  +1    -1    rkward/misc/rkspecialactions.cpp
M  +1    -1    rkward/misc/rkspinbox.cpp
M  +2    -2    rkward/plugin/rkabstractoptionselector.cpp
M  +1    -1    rkward/plugin/rkcheckbox.cpp
M  +3    -3    rkward/plugin/rkcomponent.cpp
M  +2    -2    rkward/plugin/rkcomponentproperties.cpp
M  +2    -2    rkward/plugin/rkformula.cpp
M  +2    -2    rkward/plugin/rkmatrixinput.cpp
M  +3    -3    rkward/plugin/rkoptionset.cpp
M  +1    -1    rkward/plugin/rkpluginframe.cpp
M  +2    -2    rkward/plugin/rkpluginsaveobject.cpp
M  +3    -3    rkward/plugin/rkpluginspinbox.cpp
M  +2    -2    rkward/plugin/rkpreviewbox.cpp
M  +1    -1    rkward/plugin/rkstandardcomponentgui.cpp
M  +3    -3    rkward/plugin/rkvalueselector.cpp
M  +1    -1    rkward/plugin/rkvarselector.cpp
M  +1    -1    rkward/plugin/rkvarslot.cpp
M  +1    -1    rkward/settings/rksettings.cpp
M  +4    -4    rkward/settings/rksettingsmodulecommandeditor.cpp
M  +2    -2    rkward/settings/rksettingsmoduledebug.cpp
M  +1    -1    rkward/settings/rksettingsmodulegeneral.cpp
M  +2    -2    rkward/settings/rksettingsmodulegraphics.cpp
M  +1    -1    rkward/settings/rksettingsmoduleplugins.cpp
M  +1    -1    rkward/windows/CMakeLists.txt
M  +1    -1    rkward/windows/detachedwindowcontainer.cpp
M  +6    -6    rkward/windows/rkhtmlwindow.cpp
M  +2    -2    rkward/windows/rkworkplace.cpp
M  +1    -1    rkward/windows/rkworkplaceview.cpp
M  +1    -1    rkward/windows/robjectbrowser.cpp

http://commits.kde.org/rkward/42fae40b1bf68b9f18739b8b9b456eed5fdf5ffe

diff --git a/TODO b/TODO
index 825f7d7..ed9cc93 100644
--- a/TODO
+++ b/TODO
@@ -6,6 +6,10 @@ KF5 port:
 Things to do:
 - Remove kde4libssupport classes
 - Adjust platform checks
+- There seems to be a runtime problem resolving signals, if there is another function in the same (derived) class by the same name.
+  - Check for this, somehow, and fix (e.g. by using the proper base class in signal specification)
+  - This regexp looks for signals specifications that look like a member of a class not starting with Q or K (i.e., probably, an RKWard-class):
+    "connect[^:]*[\&\(][^QK][a-zA-Z]*::" . Hopefully, checking these will be enough?
 - Since the conversion from KIcon to QIcon, there is crash on exit, sometimes. Google turns up this: https://github.com/OtterBrowser/otter-browser/issues/889
 - Device window embedding / remove qwinhost
 Things to test at the end:
diff --git a/rkward/dataeditor/twintablemember.cpp b/rkward/dataeditor/twintablemember.cpp
index 1e7c96a..f6eef9d 100644
--- a/rkward/dataeditor/twintablemember.cpp
+++ b/rkward/dataeditor/twintablemember.cpp
@@ -40,7 +40,7 @@ TwinTableMember::TwinTableMember (QWidget *parent) : RKTableView (parent){
 	horizontalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu);
 	connect (horizontalHeader (), &QWidget::customContextMenuRequested, this, &TwinTableMember::handleContextMenuRequest);
 	setContextMenuPolicy (Qt::CustomContextMenu);
-	connect (this, &TwinTableMember::customContextMenuRequested, this, &TwinTableMember::handleContextMenuRequest);
+	connect (this, &QWidget::customContextMenuRequested, this, &TwinTableMember::handleContextMenuRequest);
 
 	updating_twin = false;
 	connect (this, &TwinTableMember::blankSelectionRequest, this, &TwinTableMember::blankSelected);
diff --git a/rkward/dialogs/rkimportdialog.cpp b/rkward/dialogs/rkimportdialog.cpp
index 3ed0eee..df0b186 100644
--- a/rkward/dialogs/rkimportdialog.cpp
+++ b/rkward/dialogs/rkimportdialog.cpp
@@ -77,7 +77,7 @@ RKImportDialog::RKImportDialog (const QString &context_id, QWidget *parent) : KF
 	// initialize
 	setMode (KFile::File | KFile::ExistingOnly | KFile::LocalOnly);
 	setFilter (formats);
-	connect (this, &RKImportDialog::filterChanged, this, &RKImportDialog::filterWasChanged);
+	connect (this, &KFileDialog::filterChanged, this, &RKImportDialog::filterWasChanged);
 	filterWasChanged (QString ());
 	show ();
 }
diff --git a/rkward/dialogs/rkloadlibsdialog.cpp b/rkward/dialogs/rkloadlibsdialog.cpp
index df5bc85..62fd1ca 100644
--- a/rkward/dialogs/rkloadlibsdialog.cpp
+++ b/rkward/dialogs/rkloadlibsdialog.cpp
@@ -73,7 +73,7 @@ RKLoadLibsDialog::RKLoadLibsDialog (QWidget *parent, RCommandChain *chain, bool
 
 	configure_pluginmaps_pageitem = addChild (new RKPluginMapSelectionWidget (this), i18n ("Manage RKWard Plugins"));
 
-	connect (this, &RKLoadLibsDialog::currentPageChanged, this, &RKLoadLibsDialog::slotPageChanged);
+	connect (this, &KPageDialog::currentPageChanged, this, &RKLoadLibsDialog::slotPageChanged);
 	QTimer::singleShot (0, this, SLOT (slotPageChanged()));
 	num_child_widgets = 4;
 	was_accepted = false;
diff --git a/rkward/dialogs/rkrecoverdialog.cpp b/rkward/dialogs/rkrecoverdialog.cpp
index 6f5792f..638addf 100644
--- a/rkward/dialogs/rkrecoverdialog.cpp
+++ b/rkward/dialogs/rkrecoverdialog.cpp
@@ -47,7 +47,7 @@ RKRecoverDialog::RKRecoverDialog (const QStringList &recovery_files) {
 	setButtonToolTip (KDialog::User1, i18n ("Deletes the recovery file(s)"));
 	setButtonWhatsThis (KDialog::User1, buttonToolTip (KDialog::User1));
 	
-	connect (this, &RKRecoverDialog::user1Clicked, this, &RKRecoverDialog::deleteButtonClicked);
+	connect (this, &KDialog::user1Clicked, this, &RKRecoverDialog::deleteButtonClicked);
 	QLabel *label = new QLabel (this);
 	QString text = QString ("<p><b>%1</b></p>").arg (caption);
 	text.append (i18n ("<p>It looks like RKWard has crashed, recently. We are sorry about that! However, not everything is lost, and with a bit of luck, your data has been saved in time.</p>"));
diff --git a/rkward/misc/rkaccordiontable.cpp b/rkward/misc/rkaccordiontable.cpp
index 4f4349a..bc3e5f5 100644
--- a/rkward/misc/rkaccordiontable.cpp
+++ b/rkward/misc/rkaccordiontable.cpp
@@ -278,8 +278,8 @@ RKAccordionTable::RKAccordionTable (QWidget* parent) : QTreeView (parent) {
 	delegate->pmodel = pmodel;
 	setItemDelegateForColumn (0, delegate);
 
-	connect (this, &RKAccordionTable::expanded, this, &RKAccordionTable::rowExpanded);
-	connect (this, &RKAccordionTable::clicked, this, &RKAccordionTable::rowClicked);
+	connect (this, &QTreeView::expanded, this, &RKAccordionTable::rowExpanded);
+	connect (this, &QTreeView::clicked, this, &RKAccordionTable::rowClicked);
 }
 
 RKAccordionTable::~RKAccordionTable () {
@@ -502,9 +502,9 @@ void RKAccordionTable::setModel (QAbstractItemModel* model) {
 
 	pmodel->setSourceModel (model);
 	QTreeView::setModel (pmodel);
-	connect (pmodel, &RKAccordionDummyModel::layoutChanged, this, &RKAccordionTable::updateWidget);
-	connect (pmodel, &RKAccordionDummyModel::rowsInserted, this, &RKAccordionTable::updateWidget);
-	connect (pmodel, &RKAccordionDummyModel::rowsRemoved, this, &RKAccordionTable::updateWidget);
+	connect (pmodel, &QAbstractItemModel::layoutChanged, this, &RKAccordionTable::updateWidget);
+	connect (pmodel, &QAbstractItemModel::rowsInserted, this, &RKAccordionTable::updateWidget);
+	connect (pmodel, &QAbstractItemModel::rowsRemoved, this, &RKAccordionTable::updateWidget);
 
 	if (pmodel->rowCount () > 0) expand (pmodel->index (0, 0));
 
diff --git a/rkward/misc/rkobjectlistview.cpp b/rkward/misc/rkobjectlistview.cpp
index 20ebd1b..e9269b6 100644
--- a/rkward/misc/rkobjectlistview.cpp
+++ b/rkward/misc/rkobjectlistview.cpp
@@ -88,7 +88,7 @@ RKObjectListView::RKObjectListView (bool toolwindow, QWidget *parent) : QTreeVie
 	menu = new QMenu (this);
 	settings->addSettingsToMenu (menu, 0);
 
-	connect (this, &RKObjectListView::clicked, this, &RKObjectListView::itemClicked);
+	connect (this, &QAbstractItemView::clicked, this, &RKObjectListView::itemClicked);
 }
 
 RKObjectListView::~RKObjectListView () {
diff --git a/rkward/misc/rkprogresscontrol.cpp b/rkward/misc/rkprogresscontrol.cpp
index cae9b95..0812e1f 100644
--- a/rkward/misc/rkprogresscontrol.cpp
+++ b/rkward/misc/rkprogresscontrol.cpp
@@ -161,7 +161,7 @@ void RKProgressControl::createDialog () {
 	RK_TRACE (MISC);
 
 	dialog = new RKProgressControlDialog (text, caption, mode, modal);
-	connect (dialog, &RKProgressControlDialog::destroyed, this, &RKProgressControl::dialogDestroyed);
+	connect (dialog, &QObject::destroyed, this, &RKProgressControl::dialogDestroyed);
 	if (is_done) done ();
 	for (int i = 0; i < output_log.count (); ++i) {
 		dialog->addOutput (&(output_log[i]));
@@ -243,7 +243,7 @@ RKProgressControlDialog::RKProgressControlDialog (const QString &text, const QSt
 
 	setDetailsWidget (output_box);
 	// it's important to use a queued connection, here. Otherwise, if the details widget gets shown due to error output, scrollDown() would only scroll to the position directly *above* the new output.
-	connect (this, &RKProgressControlDialog::aboutToShowDetails, this, &RKProgressControlDialog::scrollDown, Qt::QueuedConnection);
+	connect (this, &KDialog::aboutToShowDetails, this, &RKProgressControlDialog::scrollDown, Qt::QueuedConnection);
 
 	KDialog::ButtonCodes button_codes = KDialog::Cancel;
 	if (mode_flags & RKProgressControl::OutputSwitchable) button_codes |= KDialog::Details;
diff --git a/rkward/misc/rksaveobjectchooser.cpp b/rkward/misc/rksaveobjectchooser.cpp
index d206611..029757b 100644
--- a/rkward/misc/rksaveobjectchooser.cpp
+++ b/rkward/misc/rksaveobjectchooser.cpp
@@ -109,7 +109,7 @@ void RKSaveObjectChooser::selectRootObject () {
 	list_view->setSelectionMode (QAbstractItemView::SingleSelection);
 	list_view->initialize ();
 	list_view->setObjectCurrent (root_object);
-	connect (list_view, &RKObjectListView::doubleClicked, dialog, &KDialog::accept);
+	connect (list_view, &QAbstractItemView::doubleClicked, dialog, &KDialog::accept);
 
 	dialog->exec ();
 
diff --git a/rkward/misc/rkspecialactions.cpp b/rkward/misc/rkspecialactions.cpp
index 8745a80..93ba472 100644
--- a/rkward/misc/rkspecialactions.cpp
+++ b/rkward/misc/rkspecialactions.cpp
@@ -25,7 +25,7 @@ RKPasteSpecialAction::RKPasteSpecialAction (QObject* parent) : KPasteTextAction
 	RK_TRACE (MISC);
 
 	setText (i18n ("Paste special..."));
-	connect (this, &RKPasteSpecialAction::triggered, this, &RKPasteSpecialAction::doSpecialPaste);
+	connect (this, &QAction::triggered, this, &RKPasteSpecialAction::doSpecialPaste);
 }
 
 RKPasteSpecialAction::~RKPasteSpecialAction () {
diff --git a/rkward/misc/rkspinbox.cpp b/rkward/misc/rkspinbox.cpp
index f32e4e7..c86a81a 100644
--- a/rkward/misc/rkspinbox.cpp
+++ b/rkward/misc/rkspinbox.cpp
@@ -37,7 +37,7 @@ RKSpinBox::RKSpinBox (QWidget *parent) : QSpinBox (parent) {
 	int_min = INT_MIN;
 	int_max = INT_MAX;
 
-	connect (this, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSpinBox::updateValue);
+	connect (this, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSpinBox::updateValue);
 }
 
 RKSpinBox::~RKSpinBox () {
diff --git a/rkward/plugin/rkabstractoptionselector.cpp b/rkward/plugin/rkabstractoptionselector.cpp
index d117d96..d9b7ce6 100644
--- a/rkward/plugin/rkabstractoptionselector.cpp
+++ b/rkward/plugin/rkabstractoptionselector.cpp
@@ -29,7 +29,7 @@ RKAbstractOptionSelector::RKAbstractOptionSelector (RKComponent *parent_componen
 	addChild ("string", string = new RKComponentPropertyBase (this, false));
 	connect (string, &RKComponentPropertyBase::valueChanged, this, &RKAbstractOptionSelector::propertyChanged);
 	addChild ("number", number = new RKComponentPropertyInt (this, true, -1));
-	connect (number, &RKComponentPropertyInt::valueChanged, this, &RKAbstractOptionSelector::propertyChanged);
+	connect (number, &RKComponentPropertyBase::valueChanged, this, &RKAbstractOptionSelector::propertyChanged);
 	number->setInternal (true);
 }
 
@@ -95,7 +95,7 @@ RKComponentBase* RKAbstractOptionSelector::lookupComponent (const QString &ident
 
 		if (!(opt->enabledness_prop)) {		// requested for the first time
 			opt->enabledness_prop = new RKComponentPropertyBool (this, false);
-			connect (opt->enabledness_prop, &RKComponentPropertyBool::valueChanged, this, &RKAbstractOptionSelector::ItemPropertyChanged);
+			connect (opt->enabledness_prop, &RKComponentPropertyBase::valueChanged, this, &RKAbstractOptionSelector::ItemPropertyChanged);
 		}
 
 		return (opt->enabledness_prop);
diff --git a/rkward/plugin/rkcheckbox.cpp b/rkward/plugin/rkcheckbox.cpp
index cd8acd5..5fcef9a 100644
--- a/rkward/plugin/rkcheckbox.cpp
+++ b/rkward/plugin/rkcheckbox.cpp
@@ -32,7 +32,7 @@ RKCheckBox::RKCheckBox (const QDomElement &element, RKComponent *parent_componen
 
 	// create and add property
 	addChild ("state", state = new RKComponentPropertyBool (this, true, xml->getBoolAttribute (element, "checked", false, DL_INFO), xml->getStringAttribute (element, "value", "1", DL_INFO), xml->getStringAttribute (element, "value_unchecked", QString (), DL_INFO)));
-	connect (state, &RKComponentPropertyBool::valueChanged, this, &RKCheckBox::changedState);
+	connect (state, &RKComponentPropertyBase::valueChanged, this, &RKCheckBox::changedState);
 
 	// create checkbox
 	QVBoxLayout *vbox = new QVBoxLayout (this);
diff --git a/rkward/plugin/rkcomponent.cpp b/rkward/plugin/rkcomponent.cpp
index 54945fb..df724fb 100644
--- a/rkward/plugin/rkcomponent.cpp
+++ b/rkward/plugin/rkcomponent.cpp
@@ -279,15 +279,15 @@ void RKComponent::createDefaultProperties () {
 	addChild ("enabled", enabledness_property = new RKComponentPropertyBool (this, false));
 	enabledness_property->setBoolValue (true);
 	enabledness_property->setInternal (true);
-	connect (enabledness_property, &RKComponentPropertyBool::valueChanged, this, &RKComponent::propertyValueChanged);
+	connect (enabledness_property, &RKComponentPropertyBase::valueChanged, this, &RKComponent::propertyValueChanged);
 	addChild ("visible", visibility_property = new RKComponentPropertyBool (this, false));
 	visibility_property->setBoolValue (true);
 	visibility_property->setInternal (true);
-	connect (visibility_property, &RKComponentPropertyBool::valueChanged, this, &RKComponent::propertyValueChanged);
+	connect (visibility_property, &RKComponentPropertyBase::valueChanged, this, &RKComponent::propertyValueChanged);
 	addChild ("required", requiredness_property = new RKComponentPropertyBool (this, false));
 	requiredness_property->setBoolValue (true);
 	requiredness_property->setInternal (true);
-	connect (requiredness_property, &RKComponentPropertyBool::valueChanged, this, &RKComponent::propertyValueChanged);
+	connect (requiredness_property, &RKComponentPropertyBase::valueChanged, this, &RKComponent::propertyValueChanged);
 }
 
 RKComponent::~RKComponent () {
diff --git a/rkward/plugin/rkcomponentproperties.cpp b/rkward/plugin/rkcomponentproperties.cpp
index 098103a..bfe1676 100644
--- a/rkward/plugin/rkcomponentproperties.cpp
+++ b/rkward/plugin/rkcomponentproperties.cpp
@@ -1197,7 +1197,7 @@ RKComponentPropertyConvert::RKComponentPropertyConvert (RKComponent *parent) : R
 	require_true = false;
 	c_parent = parent;
 	// get notified of own changes
-	connect (this, &RKComponentPropertyConvert::valueChanged, this, &RKComponentPropertyConvert::selfChanged);
+	connect (this, &RKComponentPropertyBase::valueChanged, this, &RKComponentPropertyConvert::selfChanged);
 }
 
 RKComponentPropertyConvert::~RKComponentPropertyConvert () {
@@ -1356,7 +1356,7 @@ RKComponentPropertySwitch::RKComponentPropertySwitch (RKComponent* parent, const
 	condition_prop = 0;
 	c_parent = parent;
 
-	connect (this, &RKComponentPropertySwitch::valueChanged, this, &RKComponentPropertySwitch::selfChanged);
+	connect (this, &RKComponentPropertyBase::valueChanged, this, &RKComponentPropertySwitch::selfChanged);
 }
 
 RKComponentPropertySwitch::~RKComponentPropertySwitch () {
diff --git a/rkward/plugin/rkformula.cpp b/rkward/plugin/rkformula.cpp
index 5f91f01..80266f0 100644
--- a/rkward/plugin/rkformula.cpp
+++ b/rkward/plugin/rkformula.cpp
@@ -41,11 +41,11 @@ RKFormula::RKFormula (const QDomElement &element, RKComponent *parent_component,
 
 	// create and register properties
 	fixed_factors = new RKComponentPropertyRObjects (this, true);
-	connect (fixed_factors, &RKComponentPropertyRObjects::valueChanged, this, &RKFormula::factorsChanged);
+	connect (fixed_factors, &RKComponentPropertyBase::valueChanged, this, &RKFormula::factorsChanged);
 	addChild ("fixed_factors", fixed_factors);
 	fixed_factors->setInternal (true);
 	dependent = new RKComponentPropertyRObjects (this, true);
-	connect (dependent, &RKComponentPropertyRObjects::valueChanged, this, &RKFormula::factorsChanged);
+	connect (dependent, &RKComponentPropertyBase::valueChanged, this, &RKFormula::factorsChanged);
 	addChild ("dependent", dependent);
 	dependent->setInternal (true);
 	model = new RKComponentPropertyBase (this, true);
diff --git a/rkward/plugin/rkmatrixinput.cpp b/rkward/plugin/rkmatrixinput.cpp
index e182868..9e31b68 100644
--- a/rkward/plugin/rkmatrixinput.cpp
+++ b/rkward/plugin/rkmatrixinput.cpp
@@ -80,8 +80,8 @@ RKMatrixInput::RKMatrixInput (const QDomElement& element, RKComponent* parent_co
 	column_count->setInternal (true);
 	addChild ("columns", column_count);
 	addChild ("tsv", tsv_data);
-	connect (row_count, &RKComponentPropertyInt::valueChanged, this, &RKMatrixInput::dimensionPropertyChanged);
-	connect (column_count, &RKComponentPropertyInt::valueChanged, this, &RKMatrixInput::dimensionPropertyChanged);
+	connect (row_count, &RKComponentPropertyBase::valueChanged, this, &RKMatrixInput::dimensionPropertyChanged);
+	connect (column_count, &RKComponentPropertyBase::valueChanged, this, &RKMatrixInput::dimensionPropertyChanged);
 	connect (tsv_data, &RKComponentPropertyBase::valueChanged, this, &RKMatrixInput::tsvPropertyChanged);
 	updating_tsv_data = false;
 
diff --git a/rkward/plugin/rkoptionset.cpp b/rkward/plugin/rkoptionset.cpp
index 19d6e5f..7baf808 100644
--- a/rkward/plugin/rkoptionset.cpp
+++ b/rkward/plugin/rkoptionset.cpp
@@ -58,7 +58,7 @@ RKOptionSet::RKOptionSet (const QDomElement &element, RKComponent *parent_compon
 	accordion = new RKAccordionTable (this);
 	switcher->addWidget (accordion);
 
-	connect (accordion, &RKAccordionTable::activated, this, &RKOptionSet::currentRowChanged);
+	connect (accordion, static_cast<void (RKAccordionTable::*)(int)>(&RKAccordionTable::activated), this, &RKOptionSet::currentRowChanged);
 	connect (accordion, &RKAccordionTable::addRow, this, &RKOptionSet::addRow);
 	connect (accordion, &RKAccordionTable::removeRow, this, &RKOptionSet::removeRow);
 
@@ -80,7 +80,7 @@ RKOptionSet::RKOptionSet (const QDomElement &element, RKComponent *parent_compon
 	current_row = new RKComponentPropertyInt (this, false, active_row);
 	current_row->setInternal (true);
 	addChild ("current_row", current_row);		// NOTE: read-write
-	connect (current_row, &RKComponentPropertyInt::valueChanged, this, &RKOptionSet::currentRowPropertyChanged);
+	connect (current_row, &RKComponentPropertyBase::valueChanged, this, &RKOptionSet::currentRowPropertyChanged);
 
 	// first build the contents, as we will need to refer to the elements inside, later
 	model = new RKOptionSetDisplayModel (this);
@@ -118,7 +118,7 @@ RKOptionSet::RKOptionSet (const QDomElement &element, RKComponent *parent_compon
 		RKComponentPropertyStringList *column_property = new RKComponentPropertyStringList (this, false);
 		column_property->setInternal (external);	// Yes, looks strange, indeed. External properties should simply not be serialized / restored...
 		addChild (id, column_property);
-		connect (column_property, &RKComponentPropertyStringList::valueChanged, this, &RKOptionSet::columnPropertyChanged);
+		connect (column_property, &RKComponentPropertyBase::valueChanged, this, &RKOptionSet::columnPropertyChanged);
 
 		if (!label.isEmpty ()) {
 			col_inf.display_index = visible_column_labels.size ();
diff --git a/rkward/plugin/rkpluginframe.cpp b/rkward/plugin/rkpluginframe.cpp
index 39cf70e..80e6869 100644
--- a/rkward/plugin/rkpluginframe.cpp
+++ b/rkward/plugin/rkpluginframe.cpp
@@ -62,7 +62,7 @@ void RKPluginFrame::initCheckedProperty () {
 	}
 
 	addChild ("checked", checked = new RKComponentPropertyBool (this, false, frame->isChecked (), "1", "0"));
-	connect (checked, &RKComponentPropertyBool::valueChanged, this, &RKPluginFrame::propertyChanged);
+	connect (checked, &RKComponentPropertyBase::valueChanged, this, &RKPluginFrame::propertyChanged);
 }
 
 RKComponentBase* RKPluginFrame::lookupComponent (const QString& identifier, QString* remainder) {
diff --git a/rkward/plugin/rkpluginsaveobject.cpp b/rkward/plugin/rkpluginsaveobject.cpp
index dd89b28..0085212 100644
--- a/rkward/plugin/rkpluginsaveobject.cpp
+++ b/rkward/plugin/rkpluginsaveobject.cpp
@@ -44,11 +44,11 @@ RKPluginSaveObject::RKPluginSaveObject (const QDomElement &element, RKComponent
 	connect (selection, &RKComponentPropertyBase::valueChanged, this, &RKPluginSaveObject::externalChange);
 	selection->setInternal (true);	// the two separate properties "parent" and "objectname" are used for (re-)storing.
 	addChild ("parent", parent = new RKComponentPropertyRObjects (this, false));
-	connect (parent, &RKComponentPropertyRObjects::valueChanged, this, &RKPluginSaveObject::externalChange);
+	connect (parent, &RKComponentPropertyBase::valueChanged, this, &RKPluginSaveObject::externalChange);
 	addChild ("objectname", objectname = new RKComponentPropertyBase (this, false));
 	connect (objectname, &RKComponentPropertyBase::valueChanged, this, &RKPluginSaveObject::externalChange);
 	addChild ("active", active = new RKComponentPropertyBool (this, false, false, "1", "0"));
-	connect (active, &RKComponentPropertyBool::valueChanged, this, &RKPluginSaveObject::externalChange);
+	connect (active, &RKComponentPropertyBase::valueChanged, this, &RKPluginSaveObject::externalChange);
 	if (!checkable) active->setInternal (true);
 
 	// create GUI
diff --git a/rkward/plugin/rkpluginspinbox.cpp b/rkward/plugin/rkpluginspinbox.cpp
index 6be70ae..cc79d8c 100644
--- a/rkward/plugin/rkpluginspinbox.cpp
+++ b/rkward/plugin/rkpluginspinbox.cpp
@@ -71,9 +71,9 @@ RKPluginSpinBox::RKPluginSpinBox (const QDomElement &element, RKComponent *paren
 	}
 
 	// connect
-	connect (spinbox, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKPluginSpinBox::valueChangedFromUi);
-	connect (intvalue, &RKComponentPropertyInt::valueChanged, this, &RKPluginSpinBox::valueChanged);
-	connect (realvalue, &RKComponentPropertyDouble::valueChanged, this, &RKPluginSpinBox::valueChanged);
+	connect (spinbox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKPluginSpinBox::valueChangedFromUi);
+	connect (intvalue, &RKComponentPropertyBase::valueChanged, this, &RKPluginSpinBox::valueChanged);
+	connect (realvalue, &RKComponentPropertyBase::valueChanged, this, &RKPluginSpinBox::valueChanged);
 	updating = false;
 
 	// finish layout
diff --git a/rkward/plugin/rkpreviewbox.cpp b/rkward/plugin/rkpreviewbox.cpp
index babd145..4702917 100644
--- a/rkward/plugin/rkpreviewbox.cpp
+++ b/rkward/plugin/rkpreviewbox.cpp
@@ -47,7 +47,7 @@ RKPreviewBox::RKPreviewBox (const QDomElement &element, RKComponent *parent_comp
 	// create and add property
 	addChild ("state", state = new RKComponentPropertyBool (this, true, preview_active, "active", "inactive"));
 	state->setInternal (true);	// restoring this does not make sense.
-	connect (state, &RKComponentPropertyBool::valueChanged, this, &RKPreviewBox::changedState);
+	connect (state, &RKComponentPropertyBase::valueChanged, this, &RKPreviewBox::changedState);
 
 	// create checkbox
 	QVBoxLayout *vbox = new QVBoxLayout (this);
@@ -66,7 +66,7 @@ RKPreviewBox::RKPreviewBox (const QDomElement &element, RKComponent *parent_comp
 	RKComponentBase *cp = parentComponent ()->lookupComponent ("code", &dummy);
 	if (cp && dummy.isNull () && (cp->type () == PropertyCode)) {
 		code_property = static_cast<RKComponentPropertyCode *> (cp);
-		connect (code_property, &RKComponentPropertyCode::valueChanged, this, &RKPreviewBox::changedCode);
+		connect (code_property, &RKComponentPropertyBase::valueChanged, this, &RKPreviewBox::changedCode);
 	} else {
 		RK_DEBUG (PLUGIN, DL_WARNING, "Could not find code property in preview box (remainder: %s)", dummy.toLatin1().data ());
 		code_property = 0;
diff --git a/rkward/plugin/rkstandardcomponentgui.cpp b/rkward/plugin/rkstandardcomponentgui.cpp
index 601cd5e..543afe4 100644
--- a/rkward/plugin/rkstandardcomponentgui.cpp
+++ b/rkward/plugin/rkstandardcomponentgui.cpp
@@ -50,7 +50,7 @@ RKStandardComponentGUI::RKStandardComponentGUI (RKStandardComponent *component,
 
 	RKStandardComponentGUI::component = component;
 	RKStandardComponentGUI::code_property = code_property;
-	connect (code_property, &RKComponentPropertyCode::valueChanged, this, &RKStandardComponentGUI::codeChanged);
+	connect (code_property, &RKComponentPropertyBase::valueChanged, this, &RKStandardComponentGUI::codeChanged);
 	connect (RKWardMainWindow::getMain(), &RKWardMainWindow::aboutToQuitRKWard, this, &RKStandardComponentGUI::cancel);
 
 	RKStandardComponentGUI::enslaved = enslaved;
diff --git a/rkward/plugin/rkvalueselector.cpp b/rkward/plugin/rkvalueselector.cpp
index 7e16c60..72c21a2 100644
--- a/rkward/plugin/rkvalueselector.cpp
+++ b/rkward/plugin/rkvalueselector.cpp
@@ -35,13 +35,13 @@ RKValueSelector::RKValueSelector (const QDomElement &element, RKComponent *paren
 	standalone = element.tagName () == "select";
 
 	addChild ("selected", selected = new RKComponentPropertyStringList (this, false));
-	connect (selected, &RKComponentPropertyStringList::valueChanged, this, &RKValueSelector::selectionPropertyChanged);
+	connect (selected, &RKComponentPropertyBase::valueChanged, this, &RKValueSelector::selectionPropertyChanged);
 	selected->setInternal (!standalone);
 	addChild ("available", available = new RKComponentPropertyStringList (this, false));
-	connect (available, &RKComponentPropertyStringList::valueChanged, this, &RKValueSelector::availablePropertyChanged);
+	connect (available, &RKComponentPropertyBase::valueChanged, this, &RKValueSelector::availablePropertyChanged);
 	available->setInternal (true);
 	addChild ("labels", labels = new RKComponentPropertyStringList (this, false));
-	connect (labels, &RKComponentPropertyStringList::valueChanged, this, &RKValueSelector::labelsPropertyChanged);
+	connect (labels, &RKComponentPropertyBase::valueChanged, this, &RKValueSelector::labelsPropertyChanged);
 	labels->setInternal (true);
 
 	QVBoxLayout *vbox = new QVBoxLayout (this);
diff --git a/rkward/plugin/rkvarselector.cpp b/rkward/plugin/rkvarselector.cpp
index 9c0aad3..6377f3b 100644
--- a/rkward/plugin/rkvarselector.cpp
+++ b/rkward/plugin/rkvarselector.cpp
@@ -44,7 +44,7 @@ RKVarSelector::RKVarSelector (const QDomElement &element, RKComponent *parent_co
 	addChild ("selected", selected = new RKComponentPropertyRObjects (this, false));
 	selected->setInternal (true);
 	addChild ("root", root = new RKComponentPropertyRObjects (this, false));
-	connect (root, &RKComponentPropertyRObjects::valueChanged, this, &RKVarSelector::rootChanged);
+	connect (root, &RKComponentPropertyBase::valueChanged, this, &RKVarSelector::rootChanged);
 	root->setInternal (true);
 
 	QVBoxLayout *vbox = new QVBoxLayout (this);
diff --git a/rkward/plugin/rkvarslot.cpp b/rkward/plugin/rkvarslot.cpp
index 084b488..5761d44 100644
--- a/rkward/plugin/rkvarslot.cpp
+++ b/rkward/plugin/rkvarslot.cpp
@@ -115,7 +115,7 @@ RKVarSlot::RKVarSlot (const QDomElement &element, RKComponent *parent_component,
 	available->setStripDuplicates (!xml->getBoolAttribute (element, "allow_duplicates", false, DL_INFO));
 	setRequired (xml->getBoolAttribute (element, "required", false, DL_INFO));
 
-	connect (available, &RKComponentPropertyAbstractList::valueChanged, this, &RKVarSlot::availablePropertyChanged);
+	connect (available, &RKComponentPropertyBase::valueChanged, this, &RKVarSlot::availablePropertyChanged);
 	availablePropertyChanged (available);	// initialize
 }
 
diff --git a/rkward/settings/rksettings.cpp b/rkward/settings/rksettings.cpp
index bd3637e..76f1002 100644
--- a/rkward/settings/rksettings.cpp
+++ b/rkward/settings/rksettings.cpp
@@ -79,7 +79,7 @@ RKSettings::RKSettings (QWidget *parent) : KPageDialog (parent) {
 
 	initModules ();
 
-	connect (this, &RKSettings::currentPageChanged, this, &RKSettings::pageChange);
+	connect (this, &KPageDialog::currentPageChanged, this, &RKSettings::pageChange);
 	pageChange (currentPage (), currentPage ());	// init
 }
 
diff --git a/rkward/settings/rksettingsmodulecommandeditor.cpp b/rkward/settings/rksettingsmodulecommandeditor.cpp
index 76a7eec..e67679f 100644
--- a/rkward/settings/rksettingsmodulecommandeditor.cpp
+++ b/rkward/settings/rksettingsmodulecommandeditor.cpp
@@ -67,7 +67,7 @@ RKSettingsModuleCommandEditor::RKSettingsModuleCommandEditor (RKSettings *gui, Q
 	completion_min_chars_box = new RKSpinBox (group);
 	completion_min_chars_box->setIntMode (1, INT_MAX, completion_min_chars);
 	completion_min_chars_box->setEnabled (completion_enabled);
-	connect (completion_min_chars_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
+	connect (completion_min_chars_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
 	box_layout->addWidget (label);
 	box_layout->addWidget (completion_min_chars_box);
 
@@ -78,7 +78,7 @@ RKSettingsModuleCommandEditor::RKSettingsModuleCommandEditor (RKSettings *gui, Q
 	completion_timeout_box = new RKSpinBox (group);
 	completion_timeout_box->setIntMode (0, INT_MAX, completion_timeout);
 	completion_timeout_box->setEnabled (completion_enabled);
-	connect (completion_timeout_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
+	connect (completion_timeout_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
 	box_layout->addWidget (label);
 	box_layout->addWidget (completion_timeout_box);
 
@@ -100,7 +100,7 @@ RKSettingsModuleCommandEditor::RKSettingsModuleCommandEditor (RKSettings *gui, Q
 	label = new QLabel (i18n ("Autosave interval (minutes)"), group);
 	autosave_interval_box = new RKSpinBox (group);
 	autosave_interval_box->setIntMode (1, INT_MAX, autosave_interval);
-	connect (autosave_interval_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
+	connect (autosave_interval_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
 	box_layout->addWidget (label);
 	box_layout->addWidget (autosave_interval_box);
 	box_layout->addSpacing (RKGlobals::spacingHint ());
@@ -120,7 +120,7 @@ RKSettingsModuleCommandEditor::RKSettingsModuleCommandEditor (RKSettings *gui, Q
 	num_recent_files_box = new RKSpinBox (group);
 	num_recent_files_box->setIntMode (1, INT_MAX, num_recent_files);
 	RKCommonFunctions::setTips (i18n ("<p>The number of recent files to remember (in the Open Recent R Script File menu).</p>") + RKCommonFunctions::noteSettingsTakesEffectAfterRestart (), num_recent_files_box, label);
-	connect (num_recent_files_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
+	connect (num_recent_files_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleCommandEditor::settingChanged);
 	box_layout->addWidget (label);
 	box_layout->addWidget (num_recent_files_box);
 	box_layout->addSpacing (RKGlobals::spacingHint ());
diff --git a/rkward/settings/rksettingsmoduledebug.cpp b/rkward/settings/rksettingsmoduledebug.cpp
index 499cc6a..28e2a48 100644
--- a/rkward/settings/rksettingsmoduledebug.cpp
+++ b/rkward/settings/rksettingsmoduledebug.cpp
@@ -48,7 +48,7 @@ RKSettingsModuleDebug::RKSettingsModuleDebug (RKSettings *gui, QWidget *parent)
 	label = new QLabel (i18n ("Debug level"), this);
 	debug_level_box = new RKSpinBox (this);
 	debug_level_box->setIntMode (DL_TRACE, DL_FATAL, DL_FATAL - RK_Debug_Level);
-	connect (debug_level_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleDebug::settingChanged);
+	connect (debug_level_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleDebug::settingChanged);
 	main_vbox->addWidget (label);
 	main_vbox->addWidget (debug_level_box);
 
@@ -84,7 +84,7 @@ RKSettingsModuleDebug::RKSettingsModuleDebug (RKSettings *gui, QWidget *parent)
 	label = new QLabel (i18n ("Command timeout"), this);
 	command_timeout_box = new RKSpinBox (this);
 	command_timeout_box->setIntMode (0, 10000, RK_Debug_CommandStep);
-	connect (command_timeout_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleDebug::settingChanged);
+	connect (command_timeout_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleDebug::settingChanged);
 	main_vbox->addWidget (label);
 	main_vbox->addWidget (command_timeout_box);
 
diff --git a/rkward/settings/rksettingsmodulegeneral.cpp b/rkward/settings/rksettingsmodulegeneral.cpp
index 4a4ea21..881499b 100644
--- a/rkward/settings/rksettingsmodulegeneral.cpp
+++ b/rkward/settings/rksettingsmodulegeneral.cpp
@@ -144,7 +144,7 @@ RKSettingsModuleGeneral::RKSettingsModuleGeneral (RKSettings *gui, QWidget *pare
 	warn_size_object_edit_box = new RKSpinBox (this);
 	warn_size_object_edit_box->setIntMode (0, INT_MAX, warn_size_object_edit);
 	warn_size_object_edit_box->setSpecialValueText (i18n ("No limit"));
-	connect (warn_size_object_edit_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleGeneral::settingChanged);
+	connect (warn_size_object_edit_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleGeneral::settingChanged);
 	main_vbox->addWidget (label);
 	main_vbox->addWidget (warn_size_object_edit_box);
 
diff --git a/rkward/settings/rksettingsmodulegraphics.cpp b/rkward/settings/rksettingsmodulegraphics.cpp
index 03dba2c..c6876c6 100644
--- a/rkward/settings/rksettingsmodulegraphics.cpp
+++ b/rkward/settings/rksettingsmodulegraphics.cpp
@@ -119,8 +119,8 @@ RKSettingsModuleGraphics::RKSettingsModuleGraphics (RKSettings *gui, QWidget *pa
 	group_layout->addWidget (new QLabel (i18n ("Default height (inches)"), group));
 	group_layout->addWidget (graphics_height_box = new RKSpinBox (group));
 	graphics_height_box->setRealMode (1, 100.0, graphics_height, 1, 3);
-	connect (graphics_width_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleGraphics::boxChanged);
-	connect (graphics_height_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModuleGraphics::boxChanged);
+	connect (graphics_width_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleGraphics::boxChanged);
+	connect (graphics_height_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModuleGraphics::boxChanged);
 	main_vbox->addWidget (group);
 
 	kde_printing_box = new QCheckBox (i18n ("Use KDE printer dialog for printing devices (if available)"), this);
diff --git a/rkward/settings/rksettingsmoduleplugins.cpp b/rkward/settings/rksettingsmoduleplugins.cpp
index ac7a809..e020b14 100644
--- a/rkward/settings/rksettingsmoduleplugins.cpp
+++ b/rkward/settings/rksettingsmoduleplugins.cpp
@@ -97,7 +97,7 @@ RKSettingsModulePlugins::RKSettingsModulePlugins (RKSettings *gui, QWidget *pare
 	new QLabel (i18n ("Default height of code display (pixels)"), code_size_hbox);
 	code_size_box = new RKSpinBox (code_size_hbox);
 	code_size_box->setIntMode (20, 5000, code_size);
-	connect (code_size_box, static_cast<void (RKSpinBox::*)(int)>(&RKSpinBox::valueChanged), this, &RKSettingsModulePlugins::settingChanged);
+	connect (code_size_box, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &RKSettingsModulePlugins::settingChanged);
 	group_layout->addWidget (code_size_hbox);
 
 	main_vbox->addWidget (code_frame);
diff --git a/rkward/windows/CMakeLists.txt b/rkward/windows/CMakeLists.txt
index b3653b2..2d9b5a6 100644
--- a/rkward/windows/CMakeLists.txt
+++ b/rkward/windows/CMakeLists.txt
@@ -37,4 +37,4 @@ INSTALL(FILES
 	rkcommandlogpart.rc
 	rktoplevelwindowgui.rc
 	rkstandardactions.rc
-	DESTINATION ${DATA_INSTALL_DIR}/rkward)
+	DESTINATION ${KXMLGUI_INSTALL_DIR}/rkward)
diff --git a/rkward/windows/detachedwindowcontainer.cpp b/rkward/windows/detachedwindowcontainer.cpp
index 3aa8f07..97dcf3a 100644
--- a/rkward/windows/detachedwindowcontainer.cpp
+++ b/rkward/windows/detachedwindowcontainer.cpp
@@ -92,7 +92,7 @@ DetachedWindowContainer::DetachedWindowContainer (RKMDIWindow *widget_to_capture
 	}
 
 // should self-destruct, when child widget is destroyed
-	connect (widget_to_capture, &RKMDIWindow::destroyed, this, &DetachedWindowContainer::viewDestroyed);
+	connect (widget_to_capture, &QObject::destroyed, this, &DetachedWindowContainer::viewDestroyed);
 	connect (widget_to_capture, &RKMDIWindow::captionChanged, this, &DetachedWindowContainer::updateCaption);
 	setCaption (widget_to_capture->fullCaption ());	// has to come after createGUI!
 }
diff --git a/rkward/windows/rkhtmlwindow.cpp b/rkward/windows/rkhtmlwindow.cpp
index 1092c30..96bf038 100644
--- a/rkward/windows/rkhtmlwindow.cpp
+++ b/rkward/windows/rkhtmlwindow.cpp
@@ -145,9 +145,9 @@ RKHTMLWindow::RKHTMLWindow (QWidget *parent, WindowMode mode) : RKMDIWindow (par
 
 	// We have to connect this in order to allow browsing.
 	connect (page, &RKWebPage::pageInternalNavigation, this, &RKHTMLWindow::internalNavigation);
-	connect (page, &RKWebPage::downloadRequested, this, &RKHTMLWindow::saveRequested);
-	connect (page, &RKWebPage::printRequested, this, &RKHTMLWindow::slotPrint);
-	connect (view, &KWebView::customContextMenuRequested, this, &RKHTMLWindow::makeContextMenu);
+	connect (page, &QWebPage::downloadRequested, this, &RKHTMLWindow::saveRequested);
+	connect (page, &QWebPage::printRequested, this, &RKHTMLWindow::slotPrint);
+	connect (view, &QWidget::customContextMenuRequested, this, &RKHTMLWindow::makeContextMenu);
 
 	current_history_position = -1;
 	url_change_is_from_history = false;
@@ -519,7 +519,7 @@ void RKHTMLWindow::useMode (WindowMode new_mode) {
 		setWindowIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowOutput));
 		part->setOutputWindowSkin ();
 		setMetaInfo (i18n ("Output Window"), QUrl ("rkward://page/rkward_output"), RKSettings::PageOutput);
-		connect (page, &RKWebPage::loadFinished, this, &RKHTMLWindow::scrollToBottom);
+		connect (page, &QWebPage::loadFinished, this, &RKHTMLWindow::scrollToBottom);
 //	TODO: This would be an interesting extension, but how to deal with concurrent edits?
 //		page->setContentEditable (true);
 	} else {
@@ -528,7 +528,7 @@ void RKHTMLWindow::useMode (WindowMode new_mode) {
 		type = RKMDIWindow::HelpWindow | RKMDIWindow::DocumentWindow;
 		setWindowIcon (RKStandardIcons::getIcon (RKStandardIcons::WindowHelp));
 		part->setHelpWindowSkin ();
-		disconnect (page, &RKWebPage::loadFinished, this, &RKHTMLWindow::scrollToBottom);
+		disconnect (page, &QWebPage::loadFinished, this, &RKHTMLWindow::scrollToBottom);
 	}
 
 	updateCaption (current_url);
@@ -1031,7 +1031,7 @@ void RKOutputWindowManager::registerWindow (RKHTMLWindow *window) {
 		}
 	
 		windows.insertMulti (file, window);
-		connect (window, &RKHTMLWindow::destroyed, this, &RKOutputWindowManager::windowDestroyed);
+		connect (window, &QObject::destroyed, this, &RKOutputWindowManager::windowDestroyed);
 	} else {
 		RK_ASSERT (false);
 	}
diff --git a/rkward/windows/rkworkplace.cpp b/rkward/windows/rkworkplace.cpp
index fc7cff9..6a9aedd 100644
--- a/rkward/windows/rkworkplace.cpp
+++ b/rkward/windows/rkworkplace.cpp
@@ -221,7 +221,7 @@ void RKWorkplace::addWindow (RKMDIWindow *window, bool attached) {
 	RK_TRACE (APP);
 
 	windows.append (window);
-	connect (window, &RKMDIWindow::destroyed, this, &RKWorkplace::removeWindow);
+	connect (window, &QObject::destroyed, this, &RKWorkplace::removeWindow);
 	connect (window, &RKMDIWindow::windowActivated, history, &RKMDIWindowHistory::windowActivated);
 	if (window->isToolWindow () && !window->tool_window_bar) return;
 	if (attached) attachWindow (window);
@@ -884,7 +884,7 @@ RKMDIWindowHistoryWidget* RKMDIWindowHistory::getSwitcher (QAction* prev_action,
 	if (switcher) return switcher;
 
 	switcher = new RKMDIWindowHistoryWidget ();
-	connect (switcher, &RKMDIWindowHistoryWidget::destroyed, this, &RKMDIWindowHistory::switcherDestroyed);
+	connect (switcher, &QObject::destroyed, this, &RKMDIWindowHistory::switcherDestroyed);
 	switcher->addAction (prev_action);
 	switcher->addAction (next_action);
 	switcher->update (recent_windows);
diff --git a/rkward/windows/rkworkplaceview.cpp b/rkward/windows/rkworkplaceview.cpp
index bbfbe10..455627d 100644
--- a/rkward/windows/rkworkplaceview.cpp
+++ b/rkward/windows/rkworkplaceview.cpp
@@ -50,7 +50,7 @@ RKWorkplaceView::RKWorkplaceView (QWidget *parent) : KTabWidget (parent) {
 	setCornerWidget (close_button, Qt::TopRightCorner);
 
 	setTabsClosable (true);
-	connect (this, &RKWorkplaceView::tabCloseRequested, this, static_cast<void (RKWorkplaceView::*)(int)>(&RKWorkplaceView::closePage));
+	connect (this, &QTabWidget::tabCloseRequested, this, static_cast<void (RKWorkplaceView::*)(int)>(&RKWorkplaceView::closePage));
 
 	setMovable (true);
 
diff --git a/rkward/windows/robjectbrowser.cpp b/rkward/windows/robjectbrowser.cpp
index 1a58d65..bbccfa5 100644
--- a/rkward/windows/robjectbrowser.cpp
+++ b/rkward/windows/robjectbrowser.cpp
@@ -138,7 +138,7 @@ RObjectBrowserInternal::RObjectBrowserInternal (QWidget *parent) : QWidget (pare
 
 	connect (list_view, &RKObjectListView::aboutToShowContextMenu, this, &RObjectBrowserInternal::contextMenuCallback);
 	
-	connect (list_view, &RKObjectListView::doubleClicked, this, &RObjectBrowserInternal::doubleClicked);
+	connect (list_view, &QAbstractItemView::doubleClicked, this, &RObjectBrowserInternal::doubleClicked);
 	
 	resize (minimumSizeHint ().expandedTo (QSize (400, 480)));
 



More information about the rkward-tracker mailing list