如何在 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 中启用自定义 gcc 参数? [复制]