2013-10-12 34 views
0

經與QScrollAreas一些問題..訪問滾動條在QScrollarea導致運行時故障

我希望能夠動態地啓用/禁用滾動條,因此我試圖實現

scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);` 

這將導致應用程序以代碼255終止並不輸出任何內容。該行註釋掉後,輸出正常。我可以使用:

scrollArea->horizontalScrollBar()->setValue(0); 

也沒有問題。我嘗試了一個自定義的QScrollArea的子類,看看是否可以讓我修改qscrollbar,但同樣的問題。 scrollArea在UI窗體上構造並在自定義的displayWindow類中重新創建。

任何想法?

+0

顯示您的代碼。哦,問題*不是編譯錯誤。 –

回答

0

你爲什麼要在UI形式中構造一個滾動區域,然後將它重新放在別的地方?並不是說這是一個問題,但這樣做沒有什麼意義。你知道,我希望Qt Designer允許你使用自定義類,即使沒有編寫任何插件。

雖然我無法重現您的問題。請創建一個sscce來重現它。確保scrollArea不是nullptr。我敢打賭,它是一個懸掛指針(指向釋放內存的指針)。在Qt 4和Qt 5上,下面的工作精細。水平滾動條根據需要被抑制。

#include <QApplication> 
#include <QScrollArea> 
#include <QLabel> 
#include <QScopedPointer> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QScopedPointer<QScrollArea> area (new QScrollArea); 
    QLabel * label = new QLabel(QString(300, 'm')); 
    area->setWidget(label); 
    area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 
    area->show(); 
    return a.exec(); 
} 
+0

對不起,我自我介紹的C++/Qt編程器令人困惑的描述... 滾動區域是在UI窗體中構造的,並且指針成員在顯示窗口中被設置爲句柄。沒有實際的再參加。 檢查指針是一個很好的起點,將scrollArea指針傳遞給子窗口小部件會導致問題。僅僅因爲指針是公開的,並不意味着用戶構建的qscrollarea是公開的... oops。通過使用子部件信號並僅在其父部件內修改qscrollarea來解決。 – user2546108

+0

@ user2546108:我不知道你在說什麼。沒有非公共對象這樣的東西,而是一個公共指針。你談論的整個事情都是一個構造。在這種情況下,在你訪問某些代碼的時候,如果編譯器沒有發出抱怨,而且你在同一個線程中,那你就沒關係。 –