我正在尝试将一个小型实用程序应用程序更新为更现代的 C++ 方式,但是我在使用一些带有 std::shared_ptr 的 Qt 对象时遇到了问题,尤其是那些接收一些其他 QWidget 作为构造函数参数的对象。
例如:
private:
std::shared_ptr<QWidget> centralwidget;
std::shared_ptr<QVBoxLayout> verticalLayout;
public:
void setupUi(QMainWindow *MainWindow) // this pointer is a .get() from a shared_ptr
{
centralwidget = std::make_shared<QWidget>(new QWidget(MainWindow)); // compiles fine
verticalLayout = std::make_shared<QVBoxLayout>(new QVBoxLayout(centralwidget.get())); // does not compile
}
编译错误是:
错误 1 错误 C2664: 'QVBoxLayout::QVBoxLayout(QWidget *)' : 无法将参数 1 从 'QVBoxLayout *' 转换为 'QWidget *' e:\microsoft visual studio 11.0\vc\include\memory 855
我似乎无法理解这个错误,我没有转换任何东西,我只是想创建一个 QVBoxLayout 对象并将 QWidget 作为其父级传递(就像我对原始指针所做的那样)。