如何将自定义小部件添加到 Qt Creator 中的主要 window

How to add a custom widget to the main window in Qt Creator

我是 Qt 新手。我从这里 http://doc.qt.io/qt-5/qtmultimediawidgets-player-example.html 举了一个例子。 现在我想把播放器集成到主window中。我创建了一个 Qt Widgets 应用程序项目,我想,我只需要编辑主要的 window 代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Player* player;
    MainWindow::setCentralWidget(player);

}

但它不起作用,我收到以下错误:

正在启动/home/***/Documents/build-player-Desktop-Debug/player... 程序意外结束。

/home/***/Documents/build-player-Desktop-Debug/player 崩溃了

如何在主 window 中没有 ui 的情况下集成用代码编写的自定义小部件?提前谢谢你。

嗯,播放器如果没有初始化就不能放在window上。 写这样的东西:

Player *player = new Player();

我通常在设计器中向我的 .ui 文件添加一个 QWidget(或我正在扩展的任何小部件类型),然后将其提升为实际的派生类型。见Qt docs for more info on promoting widgets。这意味着我可以像往常一样设置基本小部件的属性并设计 window,但在实例化 UI 时仍然获得我的特殊 class 的实例。

在您自己的 MainWindow class 中,您可以将小部件添加到 MainWindow 的布局中:

MyMainWindow::MyMainWindow(QWidget *parent) :
    ...
{
    this->ui->setupUi(this);

    QLabel *myLabel = new QLabel();

    this->layout()->addWidget(myLabel);
}
MainWindow:MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    SomeStupidWidget *ssw = new SomeStupidWidget(this); /* important! don't forget about passing "this" as argument, otherwise this could cause a memory leak(Qt handles object's lifetime by means of it's "owner" mechanism)*/

    layout()->addWidget(ssw);
}