2011年10月2日 星期日

使用QScrollArea來控制元件

當Widget不夠大來顯示裡面的元件時,通常會使用Scroll Bar(捲軸),來調整我們要看到裡面元件的部分。

Qt已經有一個類別,它已經整合了Scroll bar,當裡面的元件超過外面可以顯示的大小時,會自動產生Scroll bar來讓使用者使用。

這裡要注意的是,QScrollArea裡面只能設定一個Main Widget(setWidget)
那如果要設定多個Widget的話呢?
1. 自定一個class是繼承QWidget,裡面就放置多個你要的Widget
2. 設定一個Widget,裡面有一個Layout去管理多個Widget
有空再各寫一個sample code

若要使用Layout必需要注意以下的文章「透過setGeometry設定相對於父類別的位置

以下就是QScrollArea類別最簡單的例子:
main.cpp

#include <QApplication>
#include <QPushButton>
#include <QScrollArea>

int
main (
int argc,
char *argv[]
)
{
QApplication app (argc, argv);

//
// Create a QScrollArea for the main Widget
//

QScrollArea *ScrollArea = new QScrollArea;
ScrollArea->setWindowTitle ("QScrollArea");

//
// Create a QPushButton
//

QPushButton *Button = new QPushButton ("Hello World", ScrollArea);
Button->resize (350, 350);

//
// Set the PushButton for the main widget in the ScrollArea
//

ScrollArea->setWidget (Button);
ScrollArea->setHorizontalScrollBarPolicy (Qt::ScrollBarAlwaysOn);
ScrollArea->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOn);
ScrollArea->resize (200, 200);

ScrollArea->show ();

return app.exec ();
}



若QScrollBar裡面的Widget被Layout控制的話,則ScrollBar可能永遠不會出現~
因為是因為,裡面的Widget可能會被縮到最小,導致ScrollBar的Area仍然夠用,
當然就不會出現ScrollBar

參考資料:
Qt4 Gossip: QScrollArea
QScrollArea Class Reference

沒有留言: