[英]How to add widget in layout if there is available place for it? Otherwise not to add
在我的程序中,我必須顯示信息(具有不同大小的MarketWidgets),該信息划分為某些頁面(包含MarketWidgets列表的MarketWidgetsList)。 我的第一種方法是在有可用小部件的地方添加小部件,如果沒有放置小部件,則必須創建另一個頁面並將小部件添加到該頁面。 這是可以接受的方法嗎? 為了獲得小部件的大小,我使用QWidget::sizeHint()
因為小部件仍未繪制,但似乎不正確。 如果我在布局中使用拉伸,sizeHint是否可以返回不正確的尺寸?
如果布局可以正常顯示小部件,是否有辦法在布局中添加小部件,否則以某種方式表明沒有足夠的空間?
代碼示例
bool Ui::DynamicMarketsWidget::add_group_market_widget(Ui::GroupMarketWidget *dynamic_group_market_widget)
{
Q_ASSERT(dynamic_group_market_widget);
int tmp_height = dynamic_group_market_widget->sizeHint().height(); if(m_available_height > tmp_height)
{
m_market_layout->addWidget(dynamic_group_market_widget);
m_available_height -= tmp_height;
return true;
}
return false;
}
sizeHint()
方法sizeHint()
窗口小部件的“最佳”或“所需”大小。 如果將窗口小部件分配給布局,則它不一定具有此大小。 當前小部件實際具有的大小可以通過調用方法size()
, width()
或height()
。
您可以嘗試使用此值而不是通過大小提示方法獲得的值來更新m_available_height
。 只需確保在讀取尺寸之前先分配您的小部件即可。
您可以嘗試這樣的事情:
bool Ui::DynamicMarketsWidget::add_group_market_widget(Ui::GroupMarketWidget *dynamic_group_market_widget)
{
Q_ASSERT(dynamic_group_market_widget);
int tmp_height = dynamic_group_market_widget->sizeHint().height(); if(m_available_height > tmp_height)
{
m_market_layout->addWidget(dynamic_group_market_widget);
m_available_height -= dynamic_group_market_widget->height();
return true;
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.