如何在 Qt Creator 的主窗口中添加自定义小部件

Posted

技术标签:

【中文标题】如何在 Qt Creator 的主窗口中添加自定义小部件【英文标题】:How to add a custom widget to the main window in Qt Creator 【发布时间】:2015-05-17 19:29:12 【问题描述】:

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

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/播放器崩溃

如何集成一个用代码编写的自定义小部件,而无需在主窗口中使用 ui?提前谢谢你。

【问题讨论】:

【参考方案1】:

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

MyMainWindow::MyMainWindow(QWidget *parent) :
    ...

    this->ui->setupUi(this);

    QLabel *myLabel = new QLabel();

    this->layout()->addWidget(myLabel);

【讨论】:

我应该在这里调用 myLabel 上的 delete 吗?【参考方案2】:

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

Player *player = new Player();

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
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);

【讨论】:

以上是关于如何在 Qt Creator 的主窗口中添加自定义小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何禁止 Qt Creator 自动使用特定的包含路径?

Qt Creator 添加自定义注释

如何在 Qt Creator 中启用自定义 gcc 参数? [复制]

使用 Qt Creator 中设计的自定义小部件将页面动态添加到 QStackedWidget

[Qt Creator 快速入门] 第5章 应用程序主窗口

Qt Creator IDE 中的自定义字体