Код ниже выводит следующую ошибку:
error C2663: 'boost::signal0<R,Combiner,Group,GroupCompare,SlotFunction>::connect' : 2 overloads have no legal conversion for 'this' pointer
with
[
R=void,
Combiner=boost::last_value<void>,
Group=int,
GroupCompare=std::less<int>,
SlotFunction=boost::function<void (void)>
]
Вот код:
RepositoryEditor::RepositoryEditor(const boost::signal<void ()>& scenarioHasChangedSignal, QWidget* parent)
: QDialog(parent),
m_pActionRemove(new QAction(this))
{
ui.setupUi(this);
m_pActionRemove->setText("Remove");
m_pActionRemove->setToolTip("Remove this device");
connect(m_pActionRemove , SIGNAL(triggered()),this, SLOT(onActionRemoveClicked()));
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(onButtonClicked(QAbstractButton *)));
connect(ui.treeWidgetDevicesList, SIGNAL(itemSelectionChanged()), this, SLOT(onItemSelectionChanged()));
connect(this, SIGNAL(itemRemovedFromTree(const Events::VCS::PnPDevice &)), RepositoryManager::getInstance().getRepository(), SLOT(removeDevice(const Events::VCS::PnPDevice &)));
connect(RepositoryManager::getInstance().getRepository(), SIGNAL(deviceAdded(const DeviceItem &)), this, SLOT(addItemInTree(const DeviceItem &)));
connect(RepositoryManager::getInstance().getRepository(), SIGNAL(deviceUpdated(const DeviceItem &)), this, SLOT(updateItemInTree(const DeviceItem &)));
scenarioHasChangedSignal.connect(boost::bind(&RepositoryEditor::updateAllRootItem, this));
this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
this->setAttribute( Qt::WA_DeleteOnClose, true );
initTreeView();
}
void RepositoryEditor::updateAllRootItem()
{
int index = ui.treeWidgetDevicesList->topLevelItemCount();
for (int i=0;i<index;i++)
{
RootItem rootItem = (ui.treeWidgetDevicesList->topLevelItem(i))->data(0,Qt::UserRole).value<RootItem>();
(ui.treeWidgetDevicesList->topLevelItem(i))->setText(0,"test");
}
}
Вопрос в том : Как использовать функцию связывания с указателем «this»?
благодарю вас
Это говорит о том, что scenarioHasChangedSignal
является постоянным, тогда как connect
является неконстантной функцией-членом, которую нельзя вызывать для константного объекта. декларировать scenarioHasChangedSignal
как неконстантный boost::signal<void ()>&
,
Других решений пока нет …