重复使用 setCenterWidget

主窗口mainwindow ,有几个QWidget:widget1,widget2,.........

想交替使用widget1,widget2...作为centerWidget,

可以关联信号和槽,必要时使用setCenterWidget(widgetn),修改当前中央部件

查看手册:

void QMainWindow::setCentralWidget ( QWidget * widget )

Sets the given widget to be the main window's central widget.

Note: QMainWindow takes ownership of the widget pointer and deletes it at the appropriate time.

设置为中央部件后widget由QMainWindow管理,appropriate time 在适合时候删除它,包括窗口关闭和再次调用setCenterWidget


所以每个widget在第一次调用时都没有问题,等再次调用时会报错,因为已经被QMainWindow删除了

 有一个修改方法是,重写setCenterWidget 函数 ,调用setCenterWidget前将可能存在的centerWidget的所有权释放:

void MainWindow::setCentralWidget(QWidget *widget)
{
    QWidget * curWidget = this->centralWidget();
    if(curWidget)
        curWidget->setParent(NULL);
    this->setCentralWidget(widget);
}


更好的方法是使用 QStackedWidget ;


QStackedWidget *pagesWidget;
pagesWidget  = new QStackedWidget;
pagesWidget->addWidget(page1);
pagesWidget->addWidget(page2);
pagesWidget->addWidget(page3);
交替当前项使用函数
pagesWidget->setCurrentIndex(n)

参考:

http://qtforum.org/article/31828/question-on-qmainwindow-setcentralwidget.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值