c++ - 菜单栏功能在 Qt 中不起作用
问题描述
所以我正在编写一个简单的视频播放器程序,并且我执行了与我正在学习的课程相同的步骤,但是当我运行程序并单击诸如结束(关闭())和打开(打开文件)之类的功能时,它们不起作用,我按照课程使用了插槽触发,虽然我在这里看到了使用菜单栏的不同方式,但我必须遵循这种格式,这是我的代码:
标题:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QVideoWidget>
#include <QStyle>
#include <QMediaPlayer>
#include <QFileDialog >
namespace Ui {
class videoWidget;
}
class videoWidget : public QMainWindow
{
Q_OBJECT
QMediaPlayer *meinPlayer;
QPushButton *playButton;
QPushButton *stopButton;
public:
explicit videoWidget(QWidget *parent = 0);
~videoWidget();
private slots:
void listeUndTitelAktualisieren();
void on_action_End_triggered();
void on_action_ffnen_triggered();
void on_action_Stop_triggered();
void on_action_PlayBack_triggered();
void on_action_Pause_triggered();
private:
Ui::videoWidget *ui;
};
#endif // MAINWINDOW_H
cp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
videoWidget::videoWidget(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::videoWidget)
{
ui->setupUi(this);
meinPlayer = new QMediaPlayer(this);
meinPlayer->setMedia(QUrl::fromLocalFile("/beispiele/topologien.wmv"));
meinPlayer->play();
}
void videoWidget::listeUndTitelAktualisieren()
{
QString titel = meinPlayer->media().canonicalUrl().toLocalFile();
ui->listWidget->addItem(titel);
this->setWindowTitle("Multimedia-Player – " + titel);
connect(meinPlayer, SIGNAL(mediaChanged(QMediaContent)), this, SLOT(listeUndTitelAktualisieren()));
}
void videoWidget::on_action_End_triggered()
{
this->close();
}
void videoWidget::on_action_ffnen_triggered()
{
QFileDialog *meinDialog = new QFileDialog(this);
meinDialog->setAcceptMode(QFileDialog::AcceptOpen);
meinDialog->setWindowTitle("Datei öffnen");
meinDialog->setNameFilters(QStringList() << "Videos (*.mp4 *.wmv)" << "Audios (*.mp3)" << "Alle Dateien (*.*)");
meinDialog->setDirectory(QDir::currentPath());
meinDialog->setFileMode(QFileDialog::ExistingFile);
if (meinDialog->exec() == QDialog::Accepted) {
QString datei = meinDialog->selectedFiles().first();
meinPlayer->setMedia(QUrl::fromLocalFile(datei));
/*QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"), "/home/jana", tr("Video & Audio Files (*.mp3 *.mp4 *.wmv)"));
*/
meinPlayer->play();
}
}
void videoWidget::on_action_Stop_triggered()
{
meinPlayer->pause();
}
void videoWidget::on_action_PlayBack_triggered()
{
meinPlayer->play();
}
void videoWidget::on_action_Pause_triggered()
{
meinPlayer->pause();
}
解决方案
我很确定这里的说明:
connect(meinPlayer, SIGNAL(mediaChanged(QMediaContent)), this, SLOT(listeUndTitelAktualisieren()));
不在应该的位置,因为您正在将信号连接到 SLOT 实现的插槽 INSIDE....
尝试将其移至 dein videoWidget 的构造函数
推荐阅读
- http - 如何使用apache tomcat添加公开为http文件服务器的特定文件夹的授权?
- ios - SwiftUI如何在关闭时将数据传递到上一个屏幕
- c# - 如何在同一个下拉列表 ASPX 中添加各种 SQL 列
- javascript - HTML 模态在 Django 应用程序中不起作用
- dataframe - 在 Julia 的绘图函数中使用运算符
- javascript - 渲染期间运行的 useMemo 函数
- flutter - 堆栈小部件在 SCSV、颤振中不滚动
- javascript - 被 res.writeHead 301 nextjs 重定向后无法返回
- python - 使用 Python 从 Qlik API 中提取数据
- spring - 定义多级 spring application.yml 层次结构