QT开源例程阅读:Config Dialog Example

2013年12月23日 由 Creater 留言 »

描述

该例子项目主要是应用QStackedWidget,QStackedWidget对一组页面进行管理,可以每次显示一个页面。
分页是从0开始,如果要使某个页面可见,调用函数setCurrentIndex(int)来设置。
页号的获取,可以通过indexOf来获取子窗口部件的页号。
创建一个QStackedWidget后,通过addWidget()来添加控件到该布局管理器,使用方法同其他布局管理器。

应用

一般用于安装软件时选项设置或者一些配置页面。

详细阅读

代码中使用了一个QListWidget,为一个列表管理器,其中需要添加QListWidgetItem项,可以通过如下函数获取当前某Item所在行号,current为QListWidgetItem*。

contentsWidget->row(current)

选择不同的Item,会触信号

SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)

该信号对应的槽函数,完成页面的切换,实际上调用函数setCurrentIndex来根据页号显示页面。

void ConfigDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
{
    if (!current)
        current = previous;

    pagesWidget->setCurrentIndex(contentsWidget->row(current));
}

其他

已经定义如下两个数据成员

QListWidget *contentsWidget;
QStackedWidget *pagesWidget;

1.为了设置QListWidget中的项以图片模式显示,需要使用如下代码设置

contentsWidget->setViewMode(QListView::IconMode);

2.设置Item是否可以自由移动,Static意味着Item不能移动,Free意味着能拖动和释放到任何地方,Snap意味着能拖动和释放Items,但是仅仅在gridSize属性指定的范围内。

contentsWidget->setMovement(QListView::Static);

3.设置QListWidget当前的Item

contentsWidget->setCurrentRow(0);

4.其他占位控件,addStretch增加可伸缩占位,其中1为伸缩因子。addSpacing为不可伸缩占位。

    mainLayout->addStretch(1);
    mainLayout->addSpacing(12);

5.QListWidget中的选择项被改变后,将会发送事件currentItemChanged。

    connect(contentsWidget,
            SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
            this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
广告位

发表评论

你必须 登陆 方可发表评论.