我是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?提前谢谢。
答案 0 :(得分:2)
嗯,如果未初始化播放器,则无法将其置于窗口上。 写下这样的东西:
Player *player = new Player();
答案 1 :(得分:1)
我通常会将QWidget(或我正在扩展的任何窗口小部件类型)添加到设计器中的.ui文件中,然后将其提升为实际的派生类型。请参阅Qt docs for more info on promoting widgets。这意味着我可以像往常一样设置基本小部件的属性并设计窗口,但在实例化UI时仍然可以获得我的特殊类的实例。
答案 2 :(得分:0)
在您自己的MainWindow
类中,您可以将小部件添加到该MainWindow
的布局中:
MyMainWindow::MyMainWindow(QWidget *parent) :
...
{
this->ui->setupUi(this);
QLabel *myLabel = new QLabel();
this->layout()->addWidget(myLabel);
}
答案 3 :(得分:0)
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);
}