• 正文
    • 1. 啟用 QScroller
    • 2. 配置 QScroller 的滾動(dòng)參數(shù)
    • 3. 確保滾動(dòng)區(qū)域的交互性
    • 4. 為其他控件啟用 QScroller
    • 5. 注意事項(xiàng)
    • 總結(jié)
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

QScroller實(shí)現(xiàn)QTableView的滾動(dòng)、滑動(dòng)效果

03/16 08:25
955
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

QScroller 是 Qt 提供的一個(gè)非常強(qiáng)大的工具,專門用于實(shí)現(xiàn)滾動(dòng)效果,包括觸摸屏上的平滑滾動(dòng)、慣性滾動(dòng)等。它是 Qt Quick 和 Qt Widgets 中實(shí)現(xiàn)觸摸滾動(dòng)的推薦方式。

以下是如何使用?QScroller?來為?QTableView?或其他滾動(dòng)區(qū)域?qū)崿F(xiàn)平滑滾動(dòng)的詳細(xì)步驟:

1. 啟用 QScroller

QScroller?需要被顯式啟用,因?yàn)樗J(rèn)是禁用的??梢酝ㄟ^調(diào)用?QScroller::grabGesture?方法來啟用滾動(dòng)手勢(shì)。

示例代碼:
#include?<QScroller>
#include?<QTableView>
#include?<QApplication>

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

? ? QTableView tableView;
? ??// 設(shè)置表格模型(示例)
? ??QStandardItemModel?model(100,?2);
? ? tableView.setModel(&model);

? ??// 啟用 QScroller
? ? QScroller::grabGesture(tableView.viewport(), QScroller::TouchGesture);

? ? tableView.show();
? ??return?app.exec();
}

2. 配置 QScroller 的滾動(dòng)參數(shù)

QScroller?提供了豐富的參數(shù)來配置滾動(dòng)行為,例如滾動(dòng)速度、加速度、慣性等。這些參數(shù)可以通過?QScrollerProperties?來設(shè)置。

示例代碼:
QScrollerProperties scrollerProperties = QScroller::scroller(tableView.viewport())->scrollerProperties();

// 設(shè)置滾動(dòng)參數(shù)
scrollerProperties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor,?0.8);
scrollerProperties.setScrollMetric(QScrollerProperties::MinimumVelocity,?50);
scrollerProperties.setScrollMetric(QScrollerProperties::MaximumVelocity,?2000);
scrollerProperties.setScrollMetric(QScrollerProperties::Acceleration,?0.0001);
scrollerProperties.setScrollMetric(QScrollerProperties::Deceleration,?0.0003);

// 應(yīng)用配置
QScroller::scroller(tableView.viewport())->setScrollerProperties(scrollerProperties);

3. 確保滾動(dòng)區(qū)域的交互性

為了使?QScroller?正常工作,需要確保滾動(dòng)區(qū)域(如?QTableView?的?viewport)能夠接收觸摸事件。通常,這需要啟用?Qt::StrongFocus?或?Qt::WheelFocus。

示例代碼:
tableView.viewport()->setFocusPolicy(Qt::StrongFocus);

4. 為其他控件啟用 QScroller

QScroller?不僅適用于?QTableView,還可以用于其他支持滾動(dòng)的控件,如?QScrollArea、QTextEdit?等。只需將?QScroller::grabGesture?應(yīng)用到對(duì)應(yīng)的控件的?viewport?或滾動(dòng)區(qū)域即可。

示例代碼:
QScrollArea scrollArea;
QScroller::grabGesture(scrollArea.viewport(), QScroller::TouchGesture);

5. 注意事項(xiàng)

Qt 版本QScroller 在較新的 Qt 版本中表現(xiàn)更好,尤其是在 Qt 5.10 及以上版本中。如果你使用的是較舊的版本,可能會(huì)遇到一些兼容性問題。

平臺(tái)支持QScroller 在觸摸屏設(shè)備上表現(xiàn)最佳,但在桌面環(huán)境中也可以通過鼠標(biāo)模擬觸摸滾動(dòng)。?

性能優(yōu)化:如果滾動(dòng)區(qū)域包含大量數(shù)據(jù)或復(fù)雜布局,可能需要優(yōu)化性能。例如,為?QTableView 啟用?QAbstractItemView::VerticalScrollMode 或?QAbstractItemView::SmoothScroll。

完整示例代碼

以下是一個(gè)完整的示例,展示如何為?QTableView?啟用并配置?QScroller

#include?<QApplication>
#include?<QTableView>
#include?<QStandardItemModel>
#include?<QScroller>
#include?<QScrollerProperties>

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

? ? QTableView tableView;
? ??QStandardItemModel?model(100,?2); ?// 示例數(shù)據(jù)模型
? ? tableView.setModel(&model);

? ??// 啟用 QScroller
? ? QScroller::grabGesture(tableView.viewport(), QScroller::TouchGesture);

? ??// 配置滾動(dòng)參數(shù)
? ? QScrollerProperties scrollerProperties = QScroller::scroller(tableView.viewport())->scrollerProperties();
? ? scrollerProperties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor,?0.8);
? ? scrollerProperties.setScrollMetric(QScrollerProperties::MinimumVelocity,?50);
? ? scrollerProperties.setScrollMetric(QScrollerProperties::MaximumVelocity,?2000);
? ? scrollerProperties.setScrollMetric(QScrollerProperties::Acceleration,?0.0001);
? ? scrollerProperties.setScrollMetric(QScrollerProperties::Deceleration,?0.0003);
? ? QScroller::scroller(tableView.viewport())->setScrollerProperties(scrollerProperties);

? ??// 確保滾動(dòng)區(qū)域可以接收觸摸事件
? ? tableView.viewport()->setFocusPolicy(Qt::StrongFocus);

? ? tableView.show();
? ??return?app.exec();
}

總結(jié)

QScroller?是 Qt 提供的用于實(shí)現(xiàn)平滑滾動(dòng)和觸摸滾動(dòng)的強(qiáng)大工具。通過啟用?QScroller?并配置滾動(dòng)參數(shù),你可以輕松為?QTableView?或其他滾動(dòng)控件實(shí)現(xiàn)類似鼠標(biāo)滾輪的滾動(dòng)效果,同時(shí)支持觸摸屏的平滑滾動(dòng)和慣性滾動(dòng)。

相關(guān)推薦