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

QScroller實現(xiàn)QTableView的滾動、滑動效果

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

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

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

1. 啟用 QScroller

QScroller?需要被顯式啟用,因為它默認是禁用的??梢酝ㄟ^調(diào)用?QScroller::grabGesture?方法來啟用滾動手勢。

示例代碼:
#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 的滾動參數(shù)

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

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

// 設(shè)置滾動參數(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. 確保滾動區(qū)域的交互性

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

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

4. 為其他控件啟用 QScroller

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

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

5. 注意事項

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

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

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

完整示例代碼

以下是一個完整的示例,展示如何為?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);

? ??// 配置滾動參數(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);

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

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

總結(jié)

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

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄