我想动态地将一个新的QLabel插入到我的主窗口。它工作正常,如果我不使用std :: unique_ptr,我可以看到在我的窗口绘制QLabel。为什么我不能使用std :: unique_ptr或std :: shared_ptr?Qt Widget使用std :: unique_ptr时不显示
MainWindow::MainWindow(QWidget *parent):QMainWindow(parent)
{
setWindowFlags(Qt::FramelessWindowHint);
ui.setupUi(this);
std::unique_ptr<QLabel> shrd_QLabel = make_unique<QLabel>();
shrd_QLabel->setParent(this);
shrd_QLabel->setText("test");
shrd_QLabel->setGeometry(70, 70, 70, 70);
shrd_QLabel->show();
//The above doesnt work, however, below example works perfectly
QLabel * lpQLabel = new QLabel();
lpQLabel->setParent(this);
lpQLabel->setText("TEST #2");
lpQLabel->setGeometry(70, 170, 70, 70);
lpQLabel->show();
}
你不是真的“自己的”小部件,窗口呢,它会处理widget的所有生命周期管理包括在窗户被毁坏时确保它被销毁。这就是所有这些亲子关系都是关于这里的。因此,不需要新的智能指针,它们有自己独立的生命周期管理,在这种情况下与Qt中的指针发生冲突。 –
请不要使用'QMainWindow'。只需从'QWidget'派生。 'QMainWindow'提供了特定的对接功能 - 如果你不使用它,你不需要'QMainWindow'。 –