QT 事件处理器不能获取表格的行号
时间: 2024-12-25 07:34:37 浏览: 8
在Qt中,如果你直接从事件处理器(如`QTableWidget`的事件槽函数)中尝试获取`QTableWidgetItem`或`QModelIndex`的行号,可能会遇到一些问题。这是因为事件处理器并不总是提供精确的上下文信息,特别是对于拖动事件,它们更关注的是鼠标移动的位置,而不是引发事件的实际元素。
如果你想要在拖动事件中获取当前选中单元格的行号,你应该在事件处理之前保存这个信息。例如,在`mousePressEvent()`或`currentCellChanged(const QModelIndex &/*newCurrent*/, const QModelIndex &/*oldCurrent*/)`等适当的槽函数中记录当前位置。
下面是一个简单的例子:
```cpp
class DraggedTable : public QTableWidget
{
public:
DraggedTable(QWidget* parent = nullptr)
: QTableWidget(parent) {}
private slots:
void dragMoveEvent(QDragMoveEvent* event) override {
QModelIndex currentIndex = this->currentIndex();
// ... 其他处理逻辑 ...
// 如果你想在拖动过程中获取行号
int row = currentIndex.row();
qDebug() << "Current row during drag: " << row;
}
// ... 其他槽函数 ...
protected:
void mousePressEvent(QMouseEvent *event) override {
superClassMethod(event);
m_lastClickRow = event->y(); // 这里假设你基于鼠标Y坐标确定行号
}
private:
int m_lastClickRow; // 用于存储上次点击的行号
};
```
在这里,我们通过在`mousePressEvent()`中保存点击事件的行号,然后在拖动事件中读取这个值。
阅读全文