2013-01-23 49 views
2

我希望我的QStackedWidget調整到打開的頁面。將QStackedWidget調整到打開的頁面

我得到了很多小部件附加到第一頁,但其餘頁面只有一個按鈕。所以他們保持這麼大,第一頁是好的。

如何讓我的QStackedWidget具有所查看頁面的大小。

我之所以要這樣做的原因是我有三個不同的選擇,之後我有其他的東西。如果我改變模式,那裏有一個按鈕,然後有很多空白區域,我不明白爲什麼它不會調整大小。

回答

3

您可以使用此Resizable StackedWidget

在我的實踐我記得我從QStackedWidget衍生與重新定義的addWidget方法類。在該方法中,我沒有下一個:

void ResizableStackedWidget::addWidget(QWidget* pWidget) 
{ 
    pWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); 
    QStackedWidget::addWidget(pWidget); 
} 

和連接到currentChange(QWidget的*)與該時隙信號:

void ResizableStackedWidget::onCurrentChanged(int index) 
{ 
    QWidget* pWidget = widget(index); 
    Q_ASSERT(pWidget); 
    pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 
    pWidget->adjustSize(); 
    adjustSize(); 
} 
+0

呀。作品。 :) – darkgaze

1

你可以用單個按鈕將頁面換成垂直佈局的QFrame並在底部添加間隔。

5
// make the stacked widget size to the current page only 
for (int i = 0; i < m_ui->stackedWidget->count(); ++i) 
{ 
    // determine the vertical size policy 
    QSizePolicy::Policy policy = QSizePolicy::Ignored; 
    if (i == m_ui->stackedWidget->currentIndex()) 
     policy = QSizePolicy::Expanding; 

    // update the size policy 
    QWidget* pPage = m_ui->stackedWidget->widget (i); 
    pPage->setSizePolicy (policy, policy); 
} 
+0

謝謝!你每次都這樣做?只是當你創建它?我不明白!對不起。你究竟做到了這一點?我創建了所有小部件,我添加了它們...但我不知道你可以爲每個頁面設置一個策略。 – darkgaze

+0

設置擴展到頁面,不工作... – darkgaze

+0

每當當前頁面發生變化,請執行此操作。 – cppguy