gpt4 book ai didi

c++ - 使用鼠标滚轮平滑滚动 QTableWidget

转载 作者:行者123 更新时间:2023-11-28 04:38:25 26 4
gpt4 key购买 nike

正如我们在 this similar question 中看到的那样,可以通过使用 view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel) 平滑 QTableWidget 的滚动,当我拖动滚动条并四处移动时,这非常有效。

我在这里想要实现的是,当我转动鼠标滚轮时,QTableWidget 会平滑地滚动几行。我不是在寻找 setSingleStep()函数会导致非常非常慢的滚动,但实际上可以像我在网络浏览器中滚动网页一样平滑地滚动我的 QTableWidget 几行。

我想我可以在 making a custom WheelEvent 之前做到这一点但是对于我要在这里实现的目标来说,这似乎需要做很多工作。所以我想确定我不是在尝试重新发明(鼠标)滚轮。

是否有一个简单的解决方案(如我上面链接的问题的答案)我错过了实现我想要做的事情?

如果不是,自定义 WheelEvent 是否是正确的方法?

如果不是,那正确的方法是什么?

如果重要的话,我正在使用 Qt Creator 4.6 和 Qt 5.11

最佳答案

将QTableView子类化真的没有你想的那么糟糕。这是我的解决方案,其中包括一些调试语句以显示发生了什么。对于 ScrollPerPixel 模式,您可能希望在 item 中包含一个倍增因子以使其滚动得更快。

#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();
}

关于c++ - 使用鼠标滚轮平滑滚动 QTableWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com