【发布时间】:2019-05-21 16:14:03
【问题描述】:
我正在使用基于qt4 的qt-ros 来构建应用程序。
但是有一个问题是signal & slot不起作用。
我正在使用的 vlc-qt 库提供了一个名为played 的信号函数,如下面的链接所示。 vlc-qt
我尝试通过创建适当的slot 函数来连接到QMetaObject :: connectSlotsByName 方法,但它不能与警告“没有匹配的信号”一起工作。
在 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 库)
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();
【问题讨论】:
-
完整的警告信息是什么?
-
你更新 moc 文件了吗?如果再次运行 qmake,然后(重新)构建会发生什么?
-
@FrederikDeRuyck 我不知道如何独立运行 qmake。我只使用 qt-ros / qt_build。 "github.com/stonier/qt_ros/tree/indigo/qt_build"
-
@vahancho QMetaObject::connectSlotsByName: on_vListPlayer_played() 没有匹配信号