堆栈布局 |
发布: 2008-07-13 20:49 |
QStackedLayout类布置一组物件或者“页”,并且在同一时刻仅显示其中一个,隐藏其他的。QStackedLayout本身不可见,它也不为用户的变换页操作提供内存方法。在图6.5中的小箭头和深灰色边框是Qt设计师提供的让设计时管理布局更容易些。为了方便,Qt还包括QStackedWidget,它提供了一个带有内建QStackedLayout的QWidget。 图6.5 QStackedLayout 页序号是从0开始计的。要使一个指定的子物件可见,我们可以用一个页序号为参数调用setCurrentIndex()。一个子物件的的页序号可使用indexOf()获得。 图6.6中的选项对话框是一个使用了QStackedLayout的例子。该对话框由左边的QListWidget和右边的QStackedLayout组成。在QlistWidget中的每一项对应于QStackedLayout中的不同页。下面是该对话框的构造函数相关代码: [code type="cpp-qt"] PreferenceDialog::PreferenceDialog(QWidget *parent) : QDialog(parent) { ... listWidget = new QListWidget; listWidget->addItem(tr("Appearance")); listWidget->addItem(tr("Web Browser")); listWidget->addItem(tr("Mail & News")); listWidget->addItem(tr("Advanced")); stackedLayout = new QStackedLayout; stackedLayout->addWidget(appearancePage); stackedLayout->addWidget(webBrowserPage); stackedLayout->addWidget(mailAndNewsPage); stackedLayout->addWidget(advancedPage); connect(listWidget, SIGNAL(currentRowChanged(int)), stackedLayout, SLOT(setCurrentIndex(int))); ... listWidget->setCurrentRow(0); } [/code] 图6.6 选项对话框的两个页 我们创建了一个QListWidget并用页名字放在它里面。然后我们创建了一个QStackedLayout并为每页调用addWidget()。我们把列表物件的currentRowChanged(int)信号连接到堆栈布局的setCurrentIndex(int)来实现页的交换,并在构造函数的结尾处理调用列表物件的setCurrentRow()把序号为0的页放在开始位置。 使用Qt设计师创建这样的窗体也非常容易: 1.基于“对话框”或者“物件”模板创建一个新的窗体。 2.向窗体添加一个QListWidget 和一个 QStackedWidget 。 3.使用子物件和布局填充每一页。 (要创建一个新页,右键点击并选择插入页,要交换页,点击QStackedWidget 右上角的左箭头或者右箭头。) 4.使用一个水平布局把这些物件靠在一起。 5.把列表物件的currentRowChanged(int)信号连接到堆栈物件的setCurrentIndex(int) 槽。 6.设置列表物件的currentRow属性的值为0。 因为我们已经使用预定义的信号和槽实现了页之间的交换,在Qt设计师中预览该对话框将展示这一正确行为。 |
原文: http://qtchina.tk/?q=node/205 |
Powered by zexport
|