[英]How to add a custom widget to the main window in Qt Creator
我是 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/player 崩溃
如何在主窗口中没有 ui 的情况下集成用代码编写的自定义小部件? 先感谢您。
好吧,如果没有初始化,播放器不能放在窗口上。 写这样的东西:
Player *player = new Player();
我通常在设计器中将 QWidget(或我要扩展的任何小部件类型)添加到我的 .ui 文件中,然后将其提升为实际的派生类型。 有关推广小部件的更多信息,请参阅Qt 文档。 这意味着我可以像往常一样设置基本小部件的属性并设计窗口,但在实例化 UI 时仍然获得我的特殊类的实例。
在您自己的MainWindow
类中,您可以向该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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.