如何在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/播放器……程序意外结束。

/home/* * */文件/build-player-Desktop-Debug/播放器崩溃

我怎么能集成一个自定义的小部件是写在代码,没有ui在主窗口?

在您自己的MainWindow类中,您可以为MainWindow的布局添加一个小部件:

MyMainWindow::MyMainWindow(QWidget *parent) :
    ...
{
    this->ui->setupUi(this);
    QLabel *myLabel = new QLabel();
    this->layout()->addWidget(myLabel);
}

如果没有初始化,玩家不能被放置在窗口上。像这样写:

Player *player = new Player();

我通常在设计器中的.ui文件中添加一个QWidget(或我要扩展的任何小部件类型),然后将其提升为实际的派生类型。有关推广小部件的更多信息,请参阅Qt文档。这意味着我可以像往常一样设置基本小部件的属性并设计窗口,但在实例化UI时仍然可以获得我的特殊类的实例。

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

相关内容

  • 没有找到相关文章

最新更新