最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

1.QScroller類

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

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

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

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

QScrollerProperties::MousePressEventDelay
//設(shè)置鼠標(biāo)按下的延遲時間,比如設(shè)置按下多少ms后開始真正觸發(fā)滑動器.
 
QScrollerProperties::DragStartDistance
//設(shè)置移動閥值(按下后需要移動最少多少距離后,觸發(fā)滑動),用來避免誤操作.
 
QScrollerProperties::DragVelocitySmoothingFactor
//平滑滑動速度,當(dāng)滑動后手離開屏幕后,進(jìn)行平滑滑動的速度,此值應(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,只是點(diǎn)擊滑動條時會無反應(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示例

界面如下所示

當(dāng)然可以自定義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圖標(biāo)用的.函數(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進(jìn)行綁定滑動器.

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

相關(guān)文章

  • C語言文件操作大全

    C語言文件操作大全

    這篇文章主要介紹了C語言文件操作大全的相關(guān)資料,需要的朋友可以參考下
    2018-03-03
  • 解析VC中預(yù)編譯頭文件的深入分析

    解析VC中預(yù)編譯頭文件的深入分析

    本篇文章是對VC中預(yù)編譯頭文件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)假裝藍(lán)屏整蠱小程序

    C++實(shí)現(xiàn)假裝藍(lán)屏整蠱小程序

    因?yàn)楣ぷ鞯男枰袝r候我們離開時并不想讓別人看到我們電腦的內(nèi)容,所以本文為大家分享了一個基于C++實(shí)現(xiàn)的假裝藍(lán)屏的小程序,需要的可以參考下
    2023-06-06
  • C語言實(shí)現(xiàn)括號配對的方法示例

    C語言實(shí)現(xiàn)括號配對的方法示例

    本文主要介紹了C語言實(shí)現(xiàn)括號配對的方法示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++實(shí)現(xiàn)LeetCode(128.求最長連續(xù)序列)

    C++實(shí)現(xiàn)LeetCode(128.求最長連續(xù)序列)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(128.求最長連續(xù)序列),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹SqlRelationalTable關(guān)聯(lián)表組件的常用方法及靈活運(yùn)用,感興趣的可以了解一下
    2023-12-12
  • C/C++中宏/Macro的深入講解

    C/C++中宏/Macro的深入講解

    這篇文章主要給大家介紹了關(guān)于C/C++中宏/Macro的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C/C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • C++面試八股文之什么是構(gòu)造函數(shù)

    C++面試八股文之什么是構(gòu)造函數(shù)

    構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于創(chuàng)建和初始化類的對象,這篇文章主要為大家詳細(xì)介紹了C++中構(gòu)造函數(shù)的相關(guān)知識點(diǎn),需要的可以參考一下
    2023-06-06
  • OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長

    OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長

    區(qū)域分割是圖像處理中一個重要的任務(wù),本文主要介紹了OpenCV實(shí)現(xiàn)區(qū)域分割和區(qū)域生長,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • C++共享內(nèi)存刪除的陷阱

    C++共享內(nèi)存刪除的陷阱

    這篇文章主要介紹了C++共享內(nèi)存刪除的陷阱講解,當(dāng)進(jìn)程結(jié)束使用共享內(nèi)存區(qū)時,要通過函數(shù) shmdt 斷開與共享內(nèi)存區(qū)的連接。下面來看看具體問題都是怎么解決的吧
    2022-01-01

最新評論

红原县| 古丈县| 合作市| 金沙县| 界首市| 扶绥县| 札达县| 江西省| 威宁| 大厂| 惠来县| 莫力| 利辛县| 镇巴县| 崇明县| 子长县| 柏乡县| 赞皇县| 张家口市| 志丹县| 彰化市| 泗洪县| 方城县| 庆云县| 定南县| 宁海县| 玉田县| 万宁市| 阜阳市| 广平县| 独山县| 溆浦县| 高雄市| 隆子县| 玉环县| 镇巴县| 营口市| 武山县| 出国| 泗洪县| 株洲县|