Предупреждающее сообщение «Нет соответствующего сигнала для»

я использую qt-ros основанный на qt4 создавать приложения.

Но есть проблема, которая signal & slot не работает.

Библиотека vlc-qt, которую я использую, предоставляет сигнальную функцию под названием Play, как показано в ссылке ниже.
VLC-кварта

Я пытаюсь подключиться к QMetaObject :: connectSlotsByName метод путем создания соответствующего slot функция, но она не работает с предупреждением «Нет соответствующего сигнала для».

в mainWindow.h

public Q_SLOTS:
void on_vListPlayer_played();

и в mainWindow.cpp

void MainWindow::on_vListPlayer_played()
{
ROS_INFO("player started!------------------------------");
}
...
MainWindow::MainWindow(int argc, char** argv, QWidget *parent)
: QMainWindow(parent)
, qnode(argc,argv)
{
ui.setupUi(this); // Calling this incidentally connects all ui's triggers to on_...() callbacks in this class.

// UI Init
QWidget* mainWidget = new QWidget(this);
this->setCentralWidget(mainWidget);
mainWidget->setStyleSheet("background-color: black;");
QVBoxLayout* mainLayout = new QVBoxLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
mainWidget->setLayout(mainLayout);

m_vVideoWidget = new VlcWidgetVideo;
mainLayout->addWidget(m_vVideoWidget);

m_vInstance = new VlcInstance(VlcCommon::args(), this);
m_vPlayer = new VlcMediaPlayer(m_vInstance);
m_vPlayer->setVideoWidget(m_vVideoWidget);

vListPlayer = new VlcMediaListPlayer(m_vPlayer, m_vInstance);
QObject::connect(vListPlayer, SIGNAL(played()), this, SLOT(on_vListPlayer_played()));

m_vVideoWidget->setMediaPlayer(m_vPlayer);

m_vList = new VlcMediaList(m_vInstance);
openVideoes(m_DataPath);

vListPlayer->setMediaList(m_vList);
vListPlayer->setPlaybackMode(Vlc::PlaybackMode::Repeat);

vListPlayer->mediaPlayer()->play();
...
}

в MediaListPlayer.h (vlc-qt lib)

class VLCQT_CORE_EXPORT VlcMediaListPlayer : public QObject
{
Q_OBJECT
......
public Q_SLOTS:
void itemAt(int index);
void next();
void play();
void previous();
void stop();

Q_SIGNALS:

void played();
void nextItemSet(VlcMedia *media);
void nextItemSet(libvlc_media_t *media);
void stopped();

1

Решение

Вы используете Qt Designer, сгенерированный код (который вызывается ui.setupUi(this);) звонит QMetaObject::connectSlotsByName(QObject *object),

Согласно Документация Qt это пытается соединить все слоты с именем, соответствующим следующему шаблону: void on_<object name>_<signal name>(<signal parameters>);

Как слот void on_vListPlayer_played() соответствует шаблону, сделана попытка его подключения. Но терпит неудачу, потому что у вас нет никакого объекта названный vListPlayer,

В вашем случае я бы посоветовал вам переименовать слоты, чтобы они не соответствовали шаблону и не подключались автоматически.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]