欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt利用QScroller實現(xiàn)home界面滑動效果

 更新時間:2022年11月29日 17:10:54   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細介紹了Qt如何利用QScroller實現(xiàn)home界面滑動效果,文中的實現(xiàn)過程講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在學(xué)習(xí)本章之前需要知道滑動的關(guān)鍵詞:

鼠標按下,鼠標滑動 : 指的是用戶按下屏幕,然后進行移動的操作,此時用戶滑動多少距離,那么視圖就偏移多少距離.

平滑滑動 : 指的是手指離開屏幕了,然后會讀取滑動的速率(距離/時間),從而讓視圖自己平滑的再滑動一段距離.

1.QScroller類

用于觸摸屏的一個滑動器,實現(xiàn)用戶用手指來滑動視圖,有大量的參數(shù)設(shè)置可以通過QScrollerProperties設(shè)置,它的默認值基于平臺優(yōu)化值。

2.QScrollerProperties滑動器參數(shù)類

QScrollerProperties類存儲QScroller使用到的參數(shù),默認設(shè)置與平臺相關(guān),以便Qt模擬平臺行為進行動態(tài)滾動。當然也可以由用戶設(shè)置參數(shù)。

可以設(shè)置的參數(shù)類型有以下幾種:

QScrollerProperties::MousePressEventDelay
//設(shè)置鼠標按下的延遲時間,比如設(shè)置按下多少ms后開始真正觸發(fā)滑動器.
 
QScrollerProperties::DragStartDistance
//設(shè)置移動閥值(按下后需要移動最少多少距離后,觸發(fā)滑動),用來避免誤操作.
 
QScrollerProperties::DragVelocitySmoothingFactor
//平滑滑動速度,當滑動后手離開屏幕后,進行平滑滑動的速度,此值應(yīng)介于0和1之間。值越小,速度越慢。
 
QScrollerProperties::DecelerationFactor
//減速速度因子,減速到0速度所需的時間。對于大多數(shù)類型,該值應(yīng)在0.1到2.0的范圍內(nèi)
QScrollerProperties::MinimumVelocity
//平滑滑動的最小速度
QScrollerProperties::MaximumVelocity
//平滑滑動的最大速度
QScrollerProperties::SnapTime
//滾動曲線的時間因子。設(shè)置滾動的時長,值越小,滾動時間越長.
QScrollerProperties::FrameRate
//設(shè)置平滑滑動的刷新頻率,可以設(shè)置的值有如下幾種:
//QScrollerProperties::Fps60 
//QScrollerProperties::Fps30
//QScrollerProperties::Fps20
 
QScrollerProperties::VerticalOvershootPolicy
//垂直越區(qū)策略

3.表格類的使用示例

代碼如下所示:

table = new QTableWidget(this);
table->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
QScroller* scroller = QScroller::scroller(table->viewport()); //也可以填入直接填入table,只是點擊滑動條時會無反應(yīng).
scroller->grabGesture(table->viewport(),QScroller::LeftMouseButtonGesture);
QScrollerProperties properties = scroller->scrollerProperties();
properties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor,0.3);
properties.setScrollMetric(QScrollerProperties::FrameRate,QScrollerProperties::Fps60);
scroller->setScrollerProperties(properties);

4.自定義home界面Demo示例

界面如下所示

當然可以自定義icon列數(shù),寬高,icon之間的間距,比如橫屏:

滑動效果圖如下所示: 

支持界面自定義拖動,效果圖如下所示:

由于我們要使用QScroller,所以需要子類化QTableWidget.ScrollHome.h如下所示:

class ScrollHome : public QTableWidget
{
  Q_OBJECT
 
  int iconSize; 
  QSize itemSize; 
  int iconSpacing; 
  int iconColumn; 
  QMargins margins; 
 
  QFont font;
  QPalette palette;
  QWidget *parent;
 
  QPushButton* newAppButton(QWidget* app,AppRes& appRes);
 
  QWidget* newAppIcon(AppRes& appRes);
 
public:
  explicit ScrollHome(QWidget *parent );
 
  void InitHome(int iconColumn, int iconSpacing, int widgetWidth, int widgetHeight );
 
  int GetIconSize();
 
signals:
  void appClicked(AppRes* app);
 
protected slots:
  void onIcon();
 
};

其中InitHome()用來初始化整個home用的.newAppIcon()用來初始化每個app圖標用的.函數(shù)如下所示:

QWidget* ScrollHome::newAppIcon(AppRes& appRes)
{
  QWidget *app = new QWidget(this);
 
  app->setFixedSize(itemSize);
 
  QPushButton *btn = newAppButton(app,appRes);
  btn->move(iconSpacing/2,iconSpacing/2);
 
  QLabel *label = new QLabel(appRes.appName,app);
  label->setFont(font);
  label->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
  label->setGeometry(0,iconSize + btn->y()+4,itemSize.width(),itemSize.height()-iconSize - btn->y());
  label->setPalette(palette);
 
  return app;
}
 
void ScrollHome::InitHome(int iconColumn, int iconSpacing, int widgetWidth, int widgetHeight)
{
  this->iconColumn = iconColumn;
  this->iconSpacing = iconSpacing;
  this->setFixedSize(widgetWidth, widgetHeight);
  this->viewport()->setFixedWidth(widgetWidth);
 
 
  iconSize = (widgetWidth - iconSpacing * iconColumn)/iconColumn;
  font.setPixelSize(iconSize/5.2);
  itemSize = QSize(iconSize + iconSpacing,iconSize+iconSpacing + font.pixelSize() +10);
 
  this->setColumnCount(iconColumn);
  for(int i = 0; i < iconColumn; ++i)
  {
    this->setColumnWidth(i,itemSize.width());
  }
 
  this->clearContents();
  int rowCount = g_appResSize/iconColumn +(g_appResSize%iconColumn==0 ? 0 : 1);
  this->setRowCount(rowCount);
 
  for(int i = 0; i < rowCount; ++i) {
    for(int j = 0; j < iconColumn; ++j) {
 
      int crtIndex = i * iconColumn + j;
 
      if(crtIndex >= g_appResSize)
        break;
 
      g_appRes[crtIndex].resIndex = crtIndex;
 
      this->setCellWidget(i, j, newAppIcon(g_appRes[crtIndex]));
 
      this->setRowHeight(i,itemSize.height());
    }
  }
}

初始化完成后,即可通過QScroller進行綁定滑動器.

到此這篇關(guān)于Qt利用QScroller實現(xiàn)home界面滑動效果的文章就介紹到這了,更多相關(guān)Qt QScroller界面滑動效果內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++ #include是怎么樣工作的?

    c++ #include是怎么樣工作的?

    大多數(shù)園友可能對“#include”比較熟悉,因為我們寫C/C++程序的時候都會寫的字符串之一,但是它是具體怎么工作的?或者它的原理是什么呢?
    2013-01-01
  • C語言實現(xiàn)日期和時間處理的常用函數(shù)總結(jié)

    C語言實現(xiàn)日期和時間處理的常用函數(shù)總結(jié)

    在C語言中,時間和日期處理是一項非常基礎(chǔ)的技能,也是開發(fā)實際應(yīng)用程序時經(jīng)常會用到的功能,本文為大家總結(jié)了C語言中一些常用的時間庫函數(shù),希望對大家有所幫助
    2023-06-06
  • 一篇文章教你在C++中操作符可分為哪幾種類和用法

    一篇文章教你在C++中操作符可分為哪幾種類和用法

    這篇文章主要介紹了C++編程中操作符的種類和用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 簡單實現(xiàn)C語言2048游戲

    簡單實現(xiàn)C語言2048游戲

    這篇文章主要為大家詳細介紹了簡單實現(xiàn)C語言2048游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 最新評論