我正在使用配置QDialog。它有幾個類別(常規,外觀等),當用戶點擊它們時會加載。每個類別都有自己的頁面。這些頁面是各自獨立的類(每個類都有自己的ui,cpp和h)。當Preferences窗口加載時,頁面被實例化並加載到QStackedWidget中。然後將Stackedwidget放置到QScrollArea中,以便可以根據需要進行滾動。擺脫QScrollArea中不必要的滾動條
但是,有一個問題。自從我加入QStackedWidget中,QScrollArea 總是具有即使在當前頁面足夠短並不需要一個垂直滾動條:(圖爲最短頁)
的ScrollArea垂直滾動政策被設置爲Qt :: ScrollBarAsNeeded,因此如果頁面大於可視區域,它應該只顯示一個條。
這是我已經嘗試過解決這個問題:
設置的滾動策略Qt的:: ScrollBarAlwaysOff。雖然這擺脫了滾動條,但它不能讓人接受,因爲它不讓用戶知道他們需要在長頁面上滾動。
設置QStackedwidget的最小/最大高度。如果我將它設置爲足夠低的值,這會使滾動條消失,但這是不可接受的,因爲它會導致某些小部件出現擠壓現象。
我知道問題有事情做與QStackedWidget但因爲這是我第一次用QStackedWidget我不知道它是什麼。我也注意到卷軸總是相同的數量;即無論頁面小部件多大/多小,可滾動區域總是相同大小。出於某種原因,它比最長的頁面稍大。起初,我認爲我在每頁底部放置的垂直隔離片會加大布局,導致這種情況,但是將它們取出不能解決問題。
更新:下面是控制Stackedwidget代碼:
void Newconfig::on_Categories_currentItemChanged(QTreeWidgetItem *current)
{
QModelIndex index=ui->Categories->currentIndex();
int idx=index.row();
QString category=current->text(0);
this->setWindowTitle("Preferences -- " + category);
if (stack->currentWidget() != 0) {
stack->currentWidget()->setSizePolicy(QSizePolicy::Ignored,
QSizePolicy::Ignored);
}
stack->setCurrentIndex(idx);
stack->currentWidget()->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
adjustSize();
}
我已經有時間來實現這一點。它的工作原理,但仍然存在問題。通常情況下,只有點擊了幾個不需要滾動條的項目,修正纔會啓動。 –
@WillKraft這可能是因爲您可能必須初始化堆疊窗口小部件中的所有窗口小部件,以便在首次放置堆疊窗口小部件時擁有「忽略大小」策略(除了最初可見的窗口)。 –