滚动区域

发布: 2008-07-13 20:52

QScrollArea类提供了一个可滚动的视口和两个滚动条。如果我们想给一个物件添加滚动条,使用QscrollArea比使用我们的QscrollBars并自己实现滚动功能要简单的多。

图 6.11 QscrollArea的示例物件


使用QScrollArea的方法是以我们想添加滚动条的物件为参数调用setWidget()。QScrollArea会自动重置物件的父物件以让它成为该视口(通过QScrollArea::viewport()访问)的子物件,如果当前还不是的话。例如,如果我们希望在第5章中开发的IconEdit物件有一个滚动条,我们可以像下面这么写:
[code type="cpp-qt"]
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
IconEditor *iconEditor = new IconEditor;
iconEditor->setIconImage(QImage(":/images/mouse.png"));
QScrollArea scrollArea;
scrollArea.setWidget(iconEditor);
scrollArea.viewport()->setBackgroundRole(QPalette::Dark);
scrollArea.viewport()->setAutoFillBackground(true);
scrollArea.setWindowTitle(QObject::tr("Icon Editor"));
scrollArea.show();
return app.exec();
}
[/code]
QScrollArea以物件当前的尺寸展示它,或者如果还没有被调整尺寸则使用它的尺寸暗示。通过调用setWidgetResizable(true),我们就能告诉QScrollArea自动调整物件的尺寸以充分利用它的尺寸暗示之外的多余空间。
默认情况下,滚动条仅在它的视口比较子物件小的时候才显示。我们可以通过设置滚动条策略强制滚动条总是显示:
[code type="cpp-qt"]
scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
[/code]
图6.12 调整QScrollArea的尺寸


QScrollArea从QabstractScrollArea继承了大多数功能。如QTextEdit和QabstractItemView等类(Qt项视图类的基类)也是从QabstractScrollArea派生的,因此我们不需要把它们包装在一个QScollArea中来获得滚动条。



原文: http://qtchina.tk/?q=node/207

Powered by zexport