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 ¤t, 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 ¤t 和 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 信号:
- cellActivated(int row, int column):
- 当用户通过单击或键盘导航激活(即选中)表格中的某个单元格时发射此信号。
- cellChanged(int row, int column):
- 当用户更改了表格中某个单元格的内容,并且更改被提交到模型时发射此信号。
- cellClicked(int row, int column):
- 当用户单击表格中的某个单元格时发射此信号。
- cellDoubleClicked(int row, int column):
- 当用户双击表格中的某个单元格时发射此信号。
- cellEntered(int row, int column):
- 当鼠标光标进入表格中的某个单元格时发射此信号。这通常与鼠标跟踪功能一起使用。
- cellPressed(int row, int column):
- 当用户按下鼠标按钮在表格中的某个单元格上时发射此信号。
- cellReleased(int row, int column):
- 当用户释放鼠标按钮在表格中的某个单元格上时发射此信号。
- currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn):
- 当当前选中的单元格发生变化时发射此信号。它提供了当前选中的单元格和之前选中的单元格的行和列索引。
- itemActivated(QTableWidgetItem *item):
- 当表格中的某个项(
QTableWidgetItem)被激活时发射此信号。
- 当表格中的某个项(
- itemChanged(QTableWidgetItem *item):
- 当表格中的某个项的数据发生变化时发射此信号。
- itemClicked(QTableWidgetItem *item):
- 当用户单击表格中的某个项时发射此信号。
- itemDoubleClicked(QTableWidgetItem *item):
- 当用户双击表格中的某个项时发射此信号。
- itemEntered(QTableWidgetItem *item):
- 当鼠标光标进入表格中的某个项时发射此信号。
- itemPressed(QTableWidgetItem *item):
- 当用户按下鼠标按钮在表格中的某个项上时发射此信号。
- itemSelectionChanged():
- 当表格中的项目选择发生变化时发射此信号。选中的项可以通过
selectedItems()方法获取。
- 当表格中的项目选择发生变化时发射此信号。选中的项可以通过
这些信号允许开发者在表格的交互过程中执行自定义操作,如更新界面、验证数据或触发其他逻辑。要使用这些信号,通常需要将它们连接到槽函数(slots),这是 Qt 信号和槽机制的一部分。
3382

被折叠的 条评论
为什么被折叠?



