Я создаю небольшой интерфейс, в котором я вложил в подкласс RViz
, который является визуализатором из ROS . В соответствии с официальной документацией возможно повторное использование и повторная реализация некоторых функций, присутствующих в этом инструменте. Я пытаюсь создать два разных QPushButton
, которые будут изменять представление реализованного рендерера.
У меня есть некоторые проблемы с SIGNAL
ans SLOT
для моих двух кнопок, фактически, когда я нажимаю их, вид не меняется.
Теперь RViz
имеет специальную функцию под названием getNumViews()
, которая позволяет пользователю устанавливать количество просмотров. В моем случае у меня есть два представления, относящиеся только к двум QPushButton
, которые я реализую.
Когда я запускаю прикладную программу, я получаю следующую ошибку QObject::connect: No such slot MyViz::switchToView()
и думаю, что все отрывки для правильной установки SIGNALS
и SLOT
были правильными в соответствии с официальной документацией . Также, для полноты, я использую C++11
, и, изучив больше, я обнаружил, что старая версия из SIGNAL
и SLOT
, которую я использую, должна оставаться в силе.
Ниже кода, относящегося к SIGNAL
и SLOT
, которые я запускаю:
myviz.h
public Q_SLOTS:
void switchToView(QString view);
private:
rviz::ViewManager *view_man;
myviz.cpp
MyViz::MyViz(QWidget *parent) : QWidget(parent)
{
// operation in the constructor
QPushButton *topViewBtn = new QPushButton("Top View");
QPushButton *sideViewBtn = new QPushButton("Side View");
connect(topViewBtn, SIGNAL(clicked()), this, SLOT(switchToView(QString("Top View"))));
connect(sideViewBtn, SIGNAL(clicked()), this, SLOT(switchToView(QString("Side View"))));
}
здесь я установил 2 возможности просмотра, связанные с двумя QPushButtons
void MyViz::switchToView(QString view)
{
view_man = manager->getViewManager();
for(int i = 0; i<view_man->getNumViews(); i++)
{
if(view_man->getViewAt(i)->getName() == view)
view_man->setCurrentFrom(view_man->getViewAt(i));
return;
std::cout<<"Did not find view named %s"<<std::endl;
}
}
Спасибо, что указали в правильном направлении для решения этой проблемы.