簡體   English   中英

qobject_cast <QVBoxLayout*> (layout()),是否合適?

[英]qobject_cast<QVBoxLayout*>(layout()), is the appropriate cast?

考慮在QWidget使用以下代碼設置布局:

setLayout(new QVBoxLayout);

然后需要檢索它(向布局添加更多內容)。 這是通過以下代碼完成的:

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

qobject_cast是在此處使用的適當類型的轉換嗎?

為了避免不必要的轉換,請這樣編寫:

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

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

在當前示例中查看代碼,為什么在創建時不僅僅獲得指針?

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

回答您的問題,最合適的演員表可能是:

dynamic_cast<QHBoxLayout*>(new QVBoxLayout);

與static_cast相比,dynamic_cast具有多項檢查和好處,因此最好在可能時使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM