大概是,把 应该在构造函数中初始化的堆栈窗体代码写到了 析构函数中 。。。。
不是因为没掌握构造/析构,而是。。。。
检查了四十多分钟没检查出来。。
被自己蠢哭。
cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
}
Widget::~Widget()
{
// 初始化三个窗体
QWidget *firstPageWidget = new QWidget;
QWidget *secondPageWidget = new QWidget;
QWidget *thirdPageWidget = new QWidget;
// 在三个窗体分别设置三个按钮
QPushButton *btn1 = new QPushButton("Page 1", firstPageWidget);
QPushButton *btn2 = new QPushButton("Page 2", secondPageWidget);
QPushButton *btn3 = new QPushButton("Page 3", thirdPageWidget);
// 实例化堆栈窗体对象,把窗体添加到堆栈窗体
QStackedWidget *stackedWidget = new QStackedWidget;
stackedWidget->addWidget(firstPageWidget);
stackedWidget->addWidget(secondPageWidget);
stackedWidget->addWidget(thirdPageWidget);
// QListWidget *listWidget = new QListWidget;
// QListWidgetItem *firstItem = new QListWidgetItem(tr("First"), listWidget);
// QListWidgetItem *secondItem = new QListWidgetItem(tr("Second"), listWidget);
// QListWidgetItem *thirdItem = new QListWidgetItem(tr("Third"), listWidget);
// listWidget->insertItem(0, firstItem);
// listWidget->insertItem(1, secondItem);
// listWidget->insertItem(2, thirdItem); // 两种方法都可以,方法一
QListWidget *listWidget = new QListWidget; // 方法二
listWidget->addItem(tr("First"));
listWidget->addItem(tr("Second"));
listWidget->addItem(tr("Third"));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(listWidget, 1);
layout->addWidget(stackedWidget, 3);
this->setLayout(layout);
connect(listWidget, SIGNAL(currentRowChanged(int)), stackedWidget, SLOT(setCurrentIndex(int)));
// 堆栈窗体的槽是确定的 ------ setCurrentIndex(int),也就意味着对应信号的参数也必须和槽匹配
this->resize(960, 600);
}