QTableWidget有currentRowChanged的信号吗

1.概要

2.内容

QTableWidget 没有直接名为 currentRowChanged 的信号。然而,QTableWidget 继承自 QTableView,而 QTableView 的选择模型(QItemSelectionModel)提供了 currentRowChanged 信号。因此,虽然 QTableWidget 没有直接暴露这个信号,但你可以通过访问其选择模型来连接并使用这个信号。

以下是如何连接和使用 currentRowChanged 信号的示例:

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QApplication>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QDebug>

class MyWidget : public QWidget {
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
        QVBoxLayout *layout = new QVBoxLayout(this);

        // 创建 QTableWidget
        tableWidget = new QTableWidget(5, 3, this);
        tableWidget->setHorizontalHeaderLabels({"Column 1", "Column 2", "Column 3"});

        // 创建 QLabel 显示当前行号
        label = new QLabel("Current row: -1", this);
        layout->addWidget(label);

        // 将 QTableWidget 添加到布局中
        layout->addWidget(tableWidget);

        // 获取选择模型并连接 currentRowChanged 信号
        connect(tableWidget->selectionModel(), &QItemSelectionModel::currentRowChanged,
                this, &MyWidget::onCurrentRowChanged);
    }

private slots:
    void onCurrentRowChanged(const QModelIndex &current, const QModelIndex &previous) {
        // 更新 QLabel 显示当前行号
        label->setText(QString("Current row: %1").arg(current.row()));
        qDebug() << "Current row changed from" << previous.row() << "to" << current.row();
    }

private:
    QTableWidget *tableWidget;
    QLabel *label;
};
#endif // MYWIDGET_H
#include "MyWidget.h"

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

在这个例子中,MyWidget 类创建了一个 QTableWidget 和一个 QLabel。它使用 tableWidget->selectionModel() 获取 QTableWidget 的选择模型,并连接 currentRowChanged 信号到 MyWidget 的 onCurrentRowChanged 槽函数。每当用户更改当前选中的行时,onCurrentRowChanged 槽函数就会被调用,并且它会更新 QLabel 的文本以显示新的行号,同时在控制台输出当前行号的变化。

请注意,currentRowChanged 信号的参数是 const QModelIndex &current 和 const QModelIndex &previous,它们分别表示当前选中的行和之前选中的行。通过访问这些索引的 row() 方法,你可以获取行号。

3.运行结果

1.窗口

2.控制台 

Current row changed from -1 to 0
Current row changed from 0 to 1
Current row changed from 1 to 2
Current row changed from 2 to 3
Current row changed from 3 to 2
Current row changed from 2 to 4

3.关联知识

1.QTableWidget的信号都有什么

QTableWidget 是 Qt 框架中用于显示表格数据的控件,它提供了多种信号(signals)来响应用户的操作和数据的变化。以下是一些常用的 QTableWidget 信号:

  1. cellActivated(int row, int column)
    • 当用户通过单击或键盘导航激活(即选中)表格中的某个单元格时发射此信号。
  2. cellChanged(int row, int column)
    • 当用户更改了表格中某个单元格的内容,并且更改被提交到模型时发射此信号。
  3. cellClicked(int row, int column)
    • 当用户单击表格中的某个单元格时发射此信号。
  4. cellDoubleClicked(int row, int column)
    • 当用户双击表格中的某个单元格时发射此信号。
  5. cellEntered(int row, int column)
    • 当鼠标光标进入表格中的某个单元格时发射此信号。这通常与鼠标跟踪功能一起使用。
  6. cellPressed(int row, int column)
    • 当用户按下鼠标按钮在表格中的某个单元格上时发射此信号。
  7. cellReleased(int row, int column)
    • 当用户释放鼠标按钮在表格中的某个单元格上时发射此信号。
  8. currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
    • 当当前选中的单元格发生变化时发射此信号。它提供了当前选中的单元格和之前选中的单元格的行和列索引。
  9. itemActivated(QTableWidgetItem *item)
    • 当表格中的某个项(QTableWidgetItem)被激活时发射此信号。
  10. itemChanged(QTableWidgetItem *item)
    • 当表格中的某个项的数据发生变化时发射此信号。
  11. itemClicked(QTableWidgetItem *item)
    • 当用户单击表格中的某个项时发射此信号。
  12. itemDoubleClicked(QTableWidgetItem *item)
    • 当用户双击表格中的某个项时发射此信号。
  13. itemEntered(QTableWidgetItem *item)
    • 当鼠标光标进入表格中的某个项时发射此信号。
  14. itemPressed(QTableWidgetItem *item)
    • 当用户按下鼠标按钮在表格中的某个项上时发射此信号。
  15. itemSelectionChanged()
    • 当表格中的项目选择发生变化时发射此信号。选中的项可以通过 selectedItems() 方法获取。

这些信号允许开发者在表格的交互过程中执行自定义操作,如更新界面、验证数据或触发其他逻辑。要使用这些信号,通常需要将它们连接到槽函数(slots),这是 Qt 信号和槽机制的一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值