QT开发中文网

现在在QWidget类中存放QTableWidget,实现展示QTableWidget历史打开过的界面,最多存20页,并通过按下工具栏的“前进”和“后退”按钮来实现界面的多次前进和多次返回功能,文件关闭后清空历史记录C++

实现的基本思路如下:

  1. 在QWidget类中定义一个QStack类型的变量,用于存储历史打开的QTableWidget界面。

  2. 在打开新的QTableWidget界面时,将该界面添加到QStack中,并判断QStack的大小是否超过20页,如果超过,则弹出栈底元素。

  3. 实现“前进”和“后退”按钮的槽函数,分别从QStack中取出上一页或下一页的QTableWidget,然后在界面中显示。

  4. 在文件关闭时清空QStack中的所有元素。

具体代码实现如下:

class MyWidget : public QWidget {
  Q_OBJECT

public:
  explicit MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
    // 创建工具栏和按钮
    m_toolbar = new QToolBar(this);
    m_backBtn = new QAction(QIcon(":/icons/back.png"), tr("Back"), this);
    m_forwardBtn = new QAction(QIcon(":/icons/forward.png"), tr("Forward"), this);

    // 连接按钮的信号槽
    connect(m_backBtn, &QAction::triggered, this, &MyWidget::onBackClicked);
    connect(m_forwardBtn, &QAction::triggered, this, &MyWidget::onForwardClicked);

    // 将按钮添加到工具栏中
    m_toolbar->addAction(m_backBtn);
    m_toolbar->addAction(m_forwardBtn);

    // 设置布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(m_toolbar);
    layout->addWidget(m_tableWidget);

    // 初始化QStack
    m_stack.reserve(20);
  }

protected:
  void closeEvent(QCloseEvent *event) override {
    // 清空QStack中的所有元素
    while (!m_stack.isEmpty()) {
      delete m_stack.pop();
    }

    event->accept();
  }

private slots:
  void onBackClicked() {
    if (!m_stack.isEmpty() && m_currentIndex > 0) {
      m_currentIndex--;
      m_tableWidget = m_stack[m_currentIndex];
      m_tableWidget->show();
    }
  }

  void onForwardClicked() {
    if (!m_stack.isEmpty() && m_currentIndex < m_stack.size() - 1) {
      m_currentIndex++;
      m_tableWidget = m_stack[m_currentIndex];
      m_tableWidget->show();
    }
  }

private:
  QToolBar *m_toolbar;
  QAction *m_backBtn;
  QAction *m_forwardBtn;
  QTableWidget *m_tableWidget;
  QStack<QTableWidget*> m_stack;
  int m_currentIndex = -1;

  void openTableWidget() {
    // 创建QTableWidget界面
    QTableWidget *tableWidget = new QTableWidget(this);

    // 将新界面添加到QStack中
    m_stack.push(tableWidget);

    // 判断QStack的大小是否超过20页,如果超过,则弹出栈底元素
    if (m_stack.size() > 20) {
      delete m_stack.takeFirst();
    }

    // 显示新界面
    m_currentIndex = m_stack.size() - 1;
    m_tableWidget = m_stack[m_currentIndex];
    m_tableWidget->show();
  }
};

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?