如何在Qt Creator

时间:2015-05-17 19:29:13

标签: c++ qt qwidget qmainwindow

我是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?提前谢谢。

4 个答案:

答案 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);
}