C++ 使用鼠标滚轮平滑滚动QTableWidget
正如我们在中所看到的,可以通过使用view->setVerticalScrollModeQAbstractItemView::ScrollPerPixel平滑QTableWidget的滚动,当我拖动滚动条并四处移动它时,这非常有效 我在这里试图实现的是,当我转动鼠标滚轮时,QTableWidget将平滑地滚动几行。我不是在寻找导致滚动速度非常慢的功能,而是像在web浏览器中滚动网页一样,将QTableWidget平滑地滚动几行 我想我也许可以做到这一点,但这似乎是我在这里试图实现很多工作。所以我想确定我没有试图重新发明鼠标滚轮 有没有一个简单的解决方案,就像我在上面链接的问题的答案一样,让我无法实现我的目标 如果不是,那么定制WheelEvent是正确的方式吗 如果不是,那正确的方法是什么C++ 使用鼠标滚轮平滑滚动QTableWidget,c++,qt,C++,Qt,正如我们在中所看到的,可以通过使用view->setVerticalScrollModeQAbstractItemView::ScrollPerPixel平滑QTableWidget的滚动,当我拖动滚动条并四处移动它时,这非常有效 我在这里试图实现的是,当我转动鼠标滚轮时,QTableWidget将平滑地滚动几行。我不是在寻找导致滚动速度非常慢的功能,而是像在web浏览器中滚动网页一样,将QTableWidget平滑地滚动几行 我想我也许可以做到这一点,但这似乎是我在这里试图实现很多工作。所以我
我将QtCreator 4.6与Qt5.11结合使用,如果这很重要的话它真的没有您认为的QTableView子类那么糟糕。这是我的解决方案,其中包括一些调试语句来显示正在发生的事情。对于ScrollPerPixel模式,您可能希望在项目中包含一个乘法因子,以使其滚动更快
#include <QtWidgets>
class MyTableClass : public QTableView //subclass standard QTableView
{
Q_OBJECT
protected:
void wheelEvent(QWheelEvent* e)
{
QString result;
int items = e->delta() > 0 ? (e->delta() + (e->DefaultDeltasPerStep - 1)) / e->DefaultDeltasPerStep :
(e->delta() - (e->DefaultDeltasPerStep - 1)) / e->DefaultDeltasPerStep; //round away from zero
qDebug() << QString("delta %1").arg(e->delta());
qDebug() << QString("items %1").arg(items);
if (e->orientation() == Qt::Vertical)
{
this->verticalScrollBar()->setValue(this->verticalScrollBar()->value()-items);
if (items > 0)
{
result = "Mouse Wheel Event: UP";
}
else
{
result = "Mouse Wheel Event: DOWN";
}
}
else
{
this->horizontalScrollBar()->setValue(this->horizontalScrollBar()->value()-items);
if (items > 0)
{
result = "Mouse Wheel Event: LEFT";
}
else
{
result = "Mouse Wheel Event: RIGHT";
}
}
qDebug() << result;
}
};
#include "main.moc" //assuming the file containing this code is named main.cpp
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout* vbox = new QVBoxLayout();
QTableView* tableView = new MyTableClass();
vbox->addWidget(tableView);
window.setLayout(vbox);
window.show();
return app.exec();
}
对不起,已经很久了,直到现在我才有机会再做这个项目。