可以将每次切换的TableIndex存储到一个QStack中,以便实现历史记录功能。具体实现如下:
- 在QWidget窗口类中定义一个QStack
类型的成员变量m_history来存储TableIndex历史记录。 - 每次切换TableIndex时,将当前的TableIndex加入m_history中。
- 每次点击“前进”或“后退”按钮时,从m_history中弹出相应的TableIndex,并使用setCurrentIndex()方法设置QTableWidget的当前索引。
- 为了保证历史记录最多只有20页,可以在加入新的TableIndex之前,先检查m_history的大小是否超过20页,如果超过,则从栈底开始删除一些旧的记录。
示例代码如下:
// 定义QWidget窗口类 class MyWidget : public QWidget { public:
MyWidget(QWidget *parent = nullptr);
private:
QTableWidget *m_tableWidgets[7]; // 存放7个表数据的QTableWidget数组
QStack<QString> m_history; // 存放TableIndex历史记录的QStack
QPushButton *m_btnBackward; // 后退按钮
QPushButton *m_btnForward; // 前进按钮
private slots:
void onCurrentIndexChanged(int index); // 切换TableIndex时触发的槽函数
void onBtnBackwardClicked(); // 后退按钮点击时触发的槽函数
void onBtnForwardClicked(); // 前进按钮点击时触发的槽函数
};
// 构造函数 MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
// 创建QTableWidget数组,并将其加入窗口布局中
QVBoxLayout *layout = new QVBoxLayout(this);
for (int i = 0; i < 7; ++i) {
m_tableWidgets[i] = new QTableWidget(this);
layout->addWidget(m_tableWidgets[i]);
}
// 创建后退和前进按钮
m_btnBackward = new QPushButton("后退", this);
m_btnForward = new QPushButton("前进", this);
// 将按钮加入窗口布局中
QHBoxLayout *btnLayout = new QHBoxLayout();
btnLayout->addWidget(m_btnBackward);
btnLayout->addWidget(m_btnForward);
layout->addLayout(btnLayout);
// 连接TableIndex切换的信号和槽函数
for (int i = 0; i < 7; ++i) {
connect(m_tableWidgets[i], &QTableWidget::currentCellChanged, this, &MyWidget::onCurrentIndexChanged);
}
// 连接后退和前进按钮的信号和槽函数
connect(m_btnBackward, &QPushButton::clicked, this, &MyWidget::onBtnBackwardClicked);
connect(m_btnForward, &QPushButton::clicked, this, &MyWidget::onBtnForwardClicked);
}
// 切换TableIndex时触发的槽函数 void MyWidget::onCurrentIndexChanged(int index) {
// 将当前的TableIndex加入历史记录中
m_history.push(QString::number(index));
// 检查历史记录是否超过20页,如果超过则删除一些旧的记录
while (m_history.size() > 20) {
m_history.removeLast();
}
}
// 后退按钮点击时触发的槽函数 void MyWidget::onBtnBackwardClicked() {
// 如果历史记录不为空,则从栈顶弹出一个TableIndex,并设置QTableWidget的当前索引
if (!m_history.isEmpty()) {
QString indexStr = m_history.pop();
int index = indexStr.toInt();
for (int i = 0; i < 7; ++i) {
m_tableWidgets[i]->setCurrentIndex(index);
}
}
}
// 前进按钮点击时触发的槽函数 void MyWidget::onBtnForwardClicked() {
// TODO: 实现前进功能,类似于后退功能,但是从栈底弹出一个TableIndex
}