QT开发中文网

使用C++qt 在QWidget窗口中存放了一个QTableWidget显示7个表数据,怎么使用QStack来实现QTableWidget的TableIndex历史记录功能,最多存20页,并通过按下“前进”和“后退”按钮来实现界面的多次前进和多次返回功能,使用addtab()之后的tab、、的索引

可以将每次切换的TableIndex存储到一个QStack中,以便实现历史记录功能。具体实现如下:

  1. 在QWidget窗口类中定义一个QStack类型的成员变量m_history来存储TableIndex历史记录。
  2. 每次切换TableIndex时,将当前的TableIndex加入m_history中。
  3. 每次点击“前进”或“后退”按钮时,从m_history中弹出相应的TableIndex,并使用setCurrentIndex()方法设置QTableWidget的当前索引。
  4. 为了保证历史记录最多只有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

}

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?