QT开发中文网

QWidget窗口中存放了一个QTableWidget,实现QTableWidget的历史记录功能,最多存20页,并通过按下“前进”和“后退”按钮来实现界面的多次前进和多次返回功能,不用切换按钮状态C++

代码如下:

#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"

实现思路如下:

  1. 使用一个QList来存储每一页的QTableWidget,并使用一个变量来记录当前页的索引。

  2. 每次添加新页时,若QList已经存储了20页,则删除第一页,然后新建一页QTableWidget并添加到QList中。

  3. 用户按下“前进”按钮时,若当前页不是最后一页,则将当前页索引加一,然后将对应的QTableWidget作为新的中央窗口。

  4. 用户按下“后退”按钮时,若当前页不是第一页,则将当前页索引减一,然后将对应的QTableWidget作为新的中央窗口。

  5. 在添加新页和切换页时,需要将之前的QTableWidget隐藏,否则会出现多个重叠的QTableWidget。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=690

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?