qobject_cast <qvboxlayout *>(layout()),是否适合演员?

时间:2016-04-08 15:20:11

标签: c++ qt c++11 qt4 qt5

考虑使用以下代码在QWidget中设置布局:

setLayout(new QVBoxLayout);

然后需要检索它(为布局添加更多内容)。这是通过以下代码完成的:

QHBoxLayout *hLayoutTime(new QHBoxLayout);
qobject_cast<QVBoxLayout*>(layout())->addLayout(hLayoutTime);

qobject_cast是否适合在此使用?

2 个答案:

答案 0 :(得分:1)

为避免不必要的投射,请按以下方式编写:

void YourWidget::setupContents()
{
     QVBoxLayout *vLayout = new QVBoxLayout(this); // effectively this does setLayout(new QVBoxLayout);

     QHBoxLayout *hLayoutTime(new QHBoxLayout);
     vLayout->addLayout(hLayoutTime);
     … … …
}

答案 1 :(得分:0)

查看当前示例中的代码,为什么不在创建时获取指针?

auto *vLayout = new QVBoxLayout;
auto *hLayoutTime = new QHBoxLayout;
vLayout->addlaout(hLayoutTime);

回答你的问题,可能是最适合的演员:

dynamic_cast<QHBoxLayout*>(new QVBoxLayout);

dynamic_cast与static_cast相比有几个检查和优势,因此最好尽可能使用它。