在项目中,时常会碰到将一个界面切换成其他界面,实现这种效果的做法有很多。这里,我将讲一个用布局类QStackedLayout 实现的。
QStackedLayout 分组布局
QStackedLayout 分组布局是将一些窗口部件按照一定的编号存放,且每次只能显示当前编号所对应的窗口部件。
比较常用的函数有:
int addWidget(QWidget* widget) //添加窗口部件
void setCurrentIndex(int index) //设置特定窗口部件可见
int indexof(QWidget* widget) //获得子窗口的编号
实际运用
在实际运用中,界面布局被特定的某个信号触发,从而显示指定的界面。
m_relatedInfoForm=new RelatedInfoForm();
m_relatedMessageForm=new RelatedMessageForm();
m_messageList=new QListWidget();
m_stackedLayout=new QStackedLayout();
m_stackedLayout->addWidget(m_messageList);
m_stackedLayout->addWidget(m_relatedInfoForm);
m_stackedLayout->addWidget(m_relatedMessageForm);
this->setLayout(m_stackedLayout);
connect(m_relatedInfoForm,SIGNAL(display(int,QStringList)),this,SLOT(switchPage(int,QStringList)));
connect(m_relatedMessageForm,SIGNAL(display(int,QStringList)),this,SLOT(switchPage(int,QStringList)));
void MessageForm::switchPage(int n, QStringList strList)
{
m_stackedLayout->setCurrentIndex(n); //指定编号为n 的界面
switch (n) {
case 0:
loadMessageList();
break;
case 1:
m_relatedInfoForm->setContent(strList);
m_relatedInfoForm->loadTreeList();
break;
case 2:
m_relatedMessageForm->setContent(strList);
m_relatedMessageForm->loadRelatedMessageList();
break;
default:
break;
}
}
结束语
这个布局类,很简单,因为太简单而被我忽略了,进而忘记了,故此,说明补充,引以为戒!