重复使用 setCenterWidget

来源:互联网 发布:肛门调教知乎 编辑:程序博客网 时间:2024/04/29 18:24

主窗口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