【发布时间】:2015-05-27 12:49:21
【问题描述】:
我正在尝试将 QWidget 指针参数 (plot2) 传递给 Qt 的 addWidget(QWidget * T,...) 函数,该函数将指向 QWidget 的指针作为其第一个参数。如果我传递原始指针plot2,我会按预期获得两个并排的面板。
原始指针版本
plot1 = new QWidget;
plot2 = new QWidget;
gridLayout = new QGridLayout(gridLayoutWidget);
...
gridLayout->addWidget(plot1, 1, 1, 1, 1);
gridLayout->addWidget(plot2.get(), 1, 2, 1, 1);
但是,如果我使用plot2 的std::unique_ptr 版本并通过std::unique_ptr(plot2) 传递指针,如下面的sn-p 所示,则与plot2 关联的面板会在没有编译器的情况下丢失任何投诉。
智能指针版本
plot1 = new QWidget;
auto plot2 = std::unique_ptr<QWidget>(new QWidget);
gridLayout = new QGridLayout(gridLayoutWidget);
...
gridLayout->addWidget(plot1, 1, 1, 1, 1);
gridLayout->addWidget(plot2.get(), 1, 2, 1, 1); // this panel goes missing
我尝试过使用std::shared_ptr,但结果还是一样。
当然,如果我 release() std::unique_ptr 与 plot2 关联如下,但据我了解,我从此不再使用智能指针版本的 plot2。
使用 std::unique_ptr.release()
plot1 = new QWidget;
auto plot2 = std::unique_ptr<QWidget>(new QWidget);
gridLayout = new QGridLayout(gridLayoutWidget);
...
gridLayout->addWidget(plot1, 1, 1, 1, 1);
gridLayout->addWidget(plot2.release(), 1, 2, 1, 1);
你能弄清楚如何让它工作吗?
【问题讨论】:
标签: c++ qt c++11 stl smart-pointers