代码如下:
#include <QtWidgets>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
private slots:
void addPage();
void forward();
void backward();
private:
QTableWidget *table;
QList<QTableWidget*> pageList;
int currentPageIndex;
QPushButton *forwardButton;
QPushButton *backwardButton;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
table = new QTableWidget(10, 2, this);
setCentralWidget(table);
currentPageIndex = -1;
forwardButton = new QPushButton("Forward", this);
forwardButton->setEnabled(false);
connect(forwardButton, &QPushButton::clicked, this, &MainWindow::forward);
backwardButton = new QPushButton("Backward", this);
backwardButton->setEnabled(false);
connect(backwardButton, &QPushButton::clicked, this, &MainWindow::backward);
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(backwardButton);
buttonLayout->addWidget(forwardButton);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(buttonLayout);
mainLayout->addWidget(table);
QWidget *mainWidget = new QWidget(this);
mainWidget->setLayout(mainLayout);
setCentralWidget(mainWidget);
addPage();
}
void MainWindow::addPage()
{
if (pageList.size() >= 20) {
delete pageList.takeFirst();
}
QTableWidget *newTable = new QTableWidget(10, 2, this);
for (int i = 0; i < 10; ++i) {
newTable->setItem(i, 0, new QTableWidgetItem(QString("Row %1").arg(i)));
newTable->setItem(i, 1, new QTableWidgetItem(QString("Page %1").arg(pageList.size() + 1)));
}
pageList.append(newTable);
currentPageIndex = pageList.size() - 1;
table->setVisible(false);
setCentralWidget(newTable);
table->setVisible(true);
forwardButton->setEnabled(false);
backwardButton->setEnabled(true);
}
void MainWindow::forward()
{
if (currentPageIndex < pageList.size() - 1) {
++currentPageIndex;
table->setVisible(false);
setCentralWidget(pageList[currentPageIndex]);
table->setVisible(true);
forwardButton->setEnabled(currentPageIndex < pageList.size() - 1);
backwardButton->setEnabled(true);
}
}
void MainWindow::backward()
{
if (currentPageIndex > 0) {
--currentPageIndex;
table->setVisible(false);
setCentralWidget(pageList[currentPageIndex]);
table->setVisible(true);
forwardButton->setEnabled(true);
backwardButton->setEnabled(currentPageIndex > 0);
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#include "main.moc"
实现思路如下:
使用一个QList来存储每一页的QTableWidget,并使用一个变量来记录当前页的索引。
每次添加新页时,若QList已经存储了20页,则删除第一页,然后新建一页QTableWidget并添加到QList中。
用户按下“前进”按钮时,若当前页不是最后一页,则将当前页索引加一,然后将对应的QTableWidget作为新的中央窗口。
用户按下“后退”按钮时,若当前页不是第一页,则将当前页索引减一,然后将对应的QTableWidget作为新的中央窗口。
在添加新页和切换页时,需要将之前的QTableWidget隐藏,否则会出现多个重叠的QTableWidget。