如何将自定义小部件添加到 Qt Creator 中的主要 window
How to add a custom widget to the main window in Qt Creator
我是 Qt 新手。我从这里 http://doc.qt.io/qt-5/qtmultimediawidgets-player-example.html 举了一个例子。
现在我想把播放器集成到主window中。我创建了一个 Qt Widgets 应用程序项目,我想,我只需要编辑主要的 window 代码:
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 崩溃了
如何在主 window 中没有 ui 的情况下集成用代码编写的自定义小部件?提前谢谢你。
嗯,播放器如果没有初始化就不能放在window上。
写这样的东西:
Player *player = new Player();
我通常在设计器中向我的 .ui 文件添加一个 QWidget(或我正在扩展的任何小部件类型),然后将其提升为实际的派生类型。见Qt docs for more info on promoting widgets。这意味着我可以像往常一样设置基本小部件的属性并设计 window,但在实例化 UI 时仍然获得我的特殊 class 的实例。
在您自己的 MainWindow
class 中,您可以将小部件添加到 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);
}
我是 Qt 新手。我从这里 http://doc.qt.io/qt-5/qtmultimediawidgets-player-example.html 举了一个例子。 现在我想把播放器集成到主window中。我创建了一个 Qt Widgets 应用程序项目,我想,我只需要编辑主要的 window 代码:
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 崩溃了
如何在主 window 中没有 ui 的情况下集成用代码编写的自定义小部件?提前谢谢你。
嗯,播放器如果没有初始化就不能放在window上。 写这样的东西:
Player *player = new Player();
我通常在设计器中向我的 .ui 文件添加一个 QWidget(或我正在扩展的任何小部件类型),然后将其提升为实际的派生类型。见Qt docs for more info on promoting widgets。这意味着我可以像往常一样设置基本小部件的属性并设计 window,但在实例化 UI 时仍然获得我的特殊 class 的实例。
在您自己的 MainWindow
class 中,您可以将小部件添加到 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);
}