国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【QT】QML—— ListView添加固定表頭的方法

這篇具有很好參考價值的文章主要介紹了【QT】QML—— ListView添加固定表頭的方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

在qt中構(gòu)建界面時經(jīng)常會對多個數(shù)據(jù)進(jìn)行排列顯示,可以使用qml提供的ListView組件來快速的構(gòu)建一個列表模型來進(jìn)行列表內(nèi)容的分組顯示;
通常的步驟是定義一個簡單的ListView列表。創(chuàng)建一個Model并填入數(shù)據(jù)到其中;

Rectangle {
	id:rootRect;
	width:600;
	height:200;
	color:"grey";

	ListView {
		id:listView;
		width:parent.width;
		height:parent.height;
		clip:true; //對超出劃定邊界的數(shù)據(jù)進(jìn)行裁剪
		delegate:modelItem; //自定義列表內(nèi)容的組件,屬性是Component
		//構(gòu)建一個Model,也可以直接引入c++中的創(chuàng)建的model 運(yùn)行程序可已看到生成了一個包含name,age,Heigth的列表
     model:ListModel {
         id: listModel;
         ListElement {
             name:"jack";
             age: "22";
             Height: "188cm"
         }
         ListElement {
             name:"mark";
             age:"19";
             Height:"178cm";
         }
         ListElement {
             name:"zhangsan";
             age:"17";
             Height:"177cm";
         }
         ListElement {
             name:"lisi";
             age:"27";
             Height:"167cm";
         }
         ListElement {
             name:"xiaoxiao";
             age:"25";
             Height:"18";
         }
     }
	}

   Component {
       id:modelItem;
       Rectangle {
           width:parent.width;
           height:40;
           color: "grey"
           Row {
               width:0.9*parent.width;
               anchors.left: parent.left;
               anchors.leftMargin: 0.1*parent.width;
               height:parent.height;
               Label {
                   text: name;
                   font.pixelSize: 20;
                   width: 0.3*parent.width;
                   anchors.verticalCenter: parent.verticalCenter;
                   verticalAlignment: Text.AlignHCenter;
               }
               Label {
                   text: age;
                   font.pixelSize: 20;
                   width: 0.3*parent.width
                   anchors.verticalCenter: parent.verticalCenter;
                   verticalAlignment: Text.AlignHCenter;
               }
               Label {
                   text: Height;
                   font.pixelSize: 20;
                   width: 0.3*parent.width
                   anchors.verticalCenter: parent.verticalCenter;
                   verticalAlignment: Text.AlignHCenter;
               }
           }
       }
   }
}

以上的內(nèi)容在qt運(yùn)行顯示的是一個基礎(chǔ)的列表,但是一眼望去并不明確每一項(xiàng)的具體含義, 這樣在一些使用過程中很不方便:具體的顯示效果如下:
【QT】QML—— ListView添加固定表頭的方法
可以通過鼠標(biāo)移動或者滾輪滑動查看列表的顯示,但是對每一項(xiàng)的含義不是那么的直觀,也有一種方法就是直接在model也就是列表的index為1的時候添加每一列的名稱進(jìn)去,顯示的時候可以看到每一列的名稱,具體代碼如下,只需在model的第一列添加如下代碼到最前面:(修改后的model如下)

model:ListModel {
    id: listModel;
    ListElement {
        name:"name";
        age:"age";
        Height:"height";
    }

    ListElement {
        name:"jack";
        age: "22";
        Height: "188cm"
    }
    ListElement {
        name:"mark";
        age:"19";
        Height:"178cm";
    }
    ListElement {
        name:"zhangsan";
        age:"17";
        Height:"177cm";
    }
    ListElement {
        name:"lisi";
        age:"27";
        Height:"167cm";
    }
    ListElement {
        name:"xiaoxiao";
        age:"25";
        Height:"181cm";
    }
    ListElement {
        name:"huahua";
        age:"38";
        Height:"188cm"
    }
}

效果展示:
【QT】QML—— ListView添加固定表頭的方法
可以看到第一行有顯示每一列數(shù)據(jù)的名字了,但是因?yàn)樵O(shè)置的字體顯示與后面一致(可以單獨(dú)對某一個index的item設(shè)置不同的參數(shù)來突出顯示,這里不做過多說明),而且會隨著滑動,而且數(shù)據(jù)多了會滑動消失,所以不推薦使用;
在qml中,可以ListView的特性創(chuàng)建一個列表頭,顯示每一項(xiàng)的具體含義;表頭header的屬性和delegate一樣也是Component;通過自定義表頭的組件顯示到列表最上面;

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.4

Window {
    id: window
    width: 640
    height: 200
    visible: true
    title: qsTr("Hello World")
    //qml ListView組件
    /*
      定義一個簡單的ListView列表,并創(chuàng)建一個Model填入數(shù)據(jù),運(yùn)行程序可已看到生成了一個包含name,age,Heigth但是一眼望去并不明確每一項(xiàng)的具體含義;
      利用ListView的特性創(chuàng)建一個列表頭,顯示每一項(xiàng)的具體含義;表頭header的屬性和delegate一樣也是Component;
     */

    Rectangle {
        id:rootRect
        width:parent.width;
        height:parent.height;
        color: "darkgrey";

        ListView {
            id:listView;
            width:parent.width;
            height:parent.height;
            clip: true; //超出邊界的數(shù)據(jù)進(jìn)行裁剪
            delegate:modelItem;
            header:headerView;//只構(gòu)建表頭上滑動時表頭也會跟隨上滑動消失
            headerPositioning: ListView.OverlayHeader;//枚舉類型
            /*
                ListView.OverlayHeader: 向上滑動直接覆蓋表頭
                ListView.InlineHeader:表頭和內(nèi)容是放置在一起的,移動也是一起移動,默認(rèn)設(shè)置此屬性;
                ListView.PullBackHeader:表頭和內(nèi)容是可以分開,向上滑動會頂上去看不見
            */

            //構(gòu)建一個Model
            model:ListModel {
                id: listModel;
                ListElement {
                    name:"jack";
                    age: "22";
                    Height: "188cm"
                }
                ListElement {
                    name:"mark";
                    age:"19";
                    Height:"178cm";
                }
                ListElement {
                    name:"zhangsan";
                    age:"17";
                    Height:"177cm";
                }
                ListElement {
                    name:"lisi";
                    age:"27";
                    Height:"167cm";
                }
                ListElement {
                    name:"xiaoxiao";
                    age:"25";
                    Height:"18";
                }
            }
        }

        Component {
            id:headerView;
            Rectangle {
                width:parent.width;
                height: 40;
                color: "lightgrey";
                z:2;//將表頭的z坐標(biāo)設(shè)置在上層,表頭在設(shè)置屬性為overlayHeader時就不會隨滑動而消失,始終顯示在最上面

                Row {
                    width: 0.9*parent.width;
                    height: parent.height;
                    anchors.left: parent.left;
                    anchors.leftMargin: 0.1*parent.width;

                    Label {
                        text: "name";
                        font.pixelSize: 20;
                        width: 0.3*parent.width;
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }
                    Label {
                        text: "age";
                        font.pixelSize: 20;
                        width: 0.3*parent.width
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }
                    Label {
                        text: "Height";
                        font.pixelSize: 20;
                        width: 0.3*parent.width
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }

                }
            }
        }

        Component {
            id:modelItem;
            Rectangle {
                width:parent.width;
                height:40;
                color: "grey"
                Row {
                    width:0.9*parent.width;
                    anchors.left: parent.left;
                    anchors.leftMargin: 0.1*parent.width;
                    height:parent.height;
                    Label {
                        text: name;
                        font.pixelSize: 20;
                        width: 0.3*parent.width;
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }
                    Label {
                        text: age;
                        font.pixelSize: 20;
                        width: 0.3*parent.width
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }
                    Label {
                        text: Height;
                        font.pixelSize: 20;
                        width: 0.3*parent.width
                        anchors.verticalCenter: parent.verticalCenter;
                        verticalAlignment: Text.AlignHCenter;
                    }
                }
            }
        }
    }
}

如果表頭還是會隨著滑動消失,可以設(shè)置組件的z軸,讓該組件顯示在最上層,達(dá)到表頭一直顯示的效果;特別要注意的是需要設(shè)置ListView的headerPositioning的屬性為ListView.OverlayHeader這個類型(三個類型的描述在代碼里有注釋),這個是向上滑動覆蓋表頭,但是因?yàn)楸眍^的z軸設(shè)置的是最上層,所以并不會被覆蓋,以此達(dá)到表頭顯示的效果。
以上的header添加后就可以在顯示一個帶表頭的列表,并且列表滑動表頭不會隨著列表滑動,始終顯示在最上方。實(shí)現(xiàn)效果顯示如下:
【QT】QML—— ListView添加固定表頭的方法

可以看到表頭一直顯示到最上方,且不會隨滑動消失。
還有一個問題就是一個點(diǎn)擊穿透的問題,上滑后點(diǎn)擊表頭會觸發(fā)列表內(nèi)容的點(diǎn)擊,如果有監(jiān)控對列表的點(diǎn)擊操作時點(diǎn)擊表頭就會造成誤操作,這里就需要做一個放穿透效果,即在表頭的組件中加上以下代碼:

MouseArea {
    anchors.fill: parent;
    onPressed: {
        mouse.accepted = true;
    }
}

如上所述。文章來源地址http://www.zghlxwxcb.cn/news/detail-515222.html

到了這里,關(guān)于【QT】QML—— ListView添加固定表頭的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 80.qt qml-QianWindow炫酷界面框架-新增Canvas動態(tài)背景

    80.qt qml-QianWindow炫酷界面框架-新增Canvas動態(tài)背景

    如下圖所示: ? ?動圖如下所示: 如果我們使用圖片,對于分辨率大的顯示時,如果圖片太小會失真,如果圖片太大會占用很大內(nèi)存,而且如果是動態(tài)圖背景,那么至少40MB大小了. 所以我們增加Canvas動態(tài)背景功能,而且Canvas還可以根據(jù)系統(tǒng)性能我們來進(jìn)行內(nèi)部代碼優(yōu)化.比單色背景有趣的

    2024年02月05日
    瀏覽(25)
  • Qt6 第一天認(rèn)識基本模塊、附加模塊、支持的平臺、QML用戶界面

    Qt6 第一天認(rèn)識基本模塊、附加模塊、支持的平臺、QML用戶界面

    Qt 5在很多年前發(fā)布,引入了一種新的聲明方式來編寫令人驚嘆的用戶界面。從那時起,我們周圍的世界發(fā)生了很大的變化。 Qt 6將是Qt 5的延續(xù),不會對大多數(shù)用戶造成干擾。是什么讓Qt對用戶有價值? 它的跨平臺特性 它的可擴(kuò)展性 世界一流的API和文檔 可維護(hù)性、穩(wěn)定性和兼

    2024年02月13日
    瀏覽(29)
  • 【QML】使用 QtQuick2的ListView創(chuàng)建一個列表(一)

    【QML】使用 QtQuick2的ListView創(chuàng)建一個列表(一)

    qtquick2版本和qtquick1版本分別提供了一個ListView組件供使用,兩個組件在使用上和屬性的提供上還是有比較大的差異的,因?yàn)閝tquick2是新的,所以就以改版本為基礎(chǔ)學(xué)習(xí)如何使用; 首先,要知道ListView提供了那些屬性提供修改,那些是只讀,各個屬性的類型是啥,這些可用在Q

    2024年02月09日
    瀏覽(24)
  • QT界面中再添加界面窗口

    QT界面中再添加界面窗口

    目錄 使用場景: 教程: 1.首先創(chuàng)建一個qt設(shè)計(jì)師界面類 2.現(xiàn)在你有界面了,但是沒有創(chuàng)建 3.創(chuàng)建了界面,但是沒有容納該界面的地方,這個時候就要選擇容納的界面, 4.創(chuàng)建完成控件以后開始添加界面,大體的方法基本都是這個 首先說一下使用場景,很多時候一個界面會包含很多不

    2024年02月16日
    瀏覽(25)
  • Qt Qml 多媒體播放視頻(MediaPlayer)遇到的問題及解決方法

    Qml 多媒體播放視頻開發(fā)過程中遇到的問題,記錄一下。 創(chuàng)建的Qt Quick Ui Prototype工程,視頻播放正常。但是相同的代碼在Qt Quick Application(compat)中卻不能正常顯示。 Qt Quick Ui Prototype目錄結(jié)構(gòu) Qt Quick Application(compat) 目錄結(jié)構(gòu) Qt Quick Ui Prototype 工程 這里沒有什么需要注意的,按照

    2024年02月05日
    瀏覽(20)
  • qt學(xué)習(xí):模仿qq界面+添加資源+無邊框界面+修改樣式

    目錄 一,創(chuàng)建登錄ui界面類 LoginWidget 二,添加圖片資源 三,通過樣式的方法將圖片設(shè)置成圓圈的背景 四,新建登錄后的ui界面? MWindow? 簡陋的就可以,因?yàn)橹粸榱藢W(xué)習(xí),可以自己補(bǔ)充 五,新建三個嵌套u(yù)i界面類,ChatWidget聊天界面? ?FriendWiidget好友界面? ?CollectWidget收藏界面

    2024年01月23日
    瀏覽(33)
  • 給table組件(有固定列的時候)固定表頭的功能實(shí)現(xiàn)

    1,增加height屬性 在props中添加height屬性, 保證在父組件中可以傳值。如果父組件不傳值,那么就是undefined 2,修改樣式 最主要的是thead和tbody的樣式,其中都是根據(jù)height去動態(tài)控制thead和tbody的樣式,注意下面三個類所在的位置以及對應(yīng)的樣式。 cvn-table-head-row cvn-table-body-row

    2024年02月12日
    瀏覽(104)
  • Qt學(xué)習(xí)_11_構(gòu)建內(nèi)嵌子界面與獨(dú)立子界面的框架

    Qt學(xué)習(xí)_11_構(gòu)建內(nèi)嵌子界面與獨(dú)立子界面的框架

    對于較大的Qt項(xiàng)目而言,彈出的 獨(dú)立 子界面 與 根據(jù)菜單在主窗口內(nèi)切換的 內(nèi)嵌 子界面是我們所必須面對的問題。那么在項(xiàng)目框架對這兩部分內(nèi)容應(yīng)該如何布局,才能讓項(xiàng)目 更清爽 , 更規(guī)整 。是本文著重討論的內(nèi)容。下圖給出我們的最終設(shè)計(jì)框架。 1.1.1 創(chuàng)建 首先介紹獨(dú)

    2024年02月02日
    瀏覽(24)
  • QT6為工程添加資源文件,并在ui界面引用

    QT6為工程添加資源文件,并在ui界面引用

    這種方式雖然添加到了工程中,但不能在UI設(shè)計(jì)界面完成引用。主要原因可能是未把文件放入到項(xiàng)目資源文件中,以下面一種方式可以看出區(qū)別。 選擇qt resource file,點(diǎn)擊選擇, 然后通過下面的設(shè)置得到一個.qrc的資源文件, 鼠標(biāo)右鍵這個資源文件,第一種添加的文件在qrc文件

    2024年02月11日
    瀏覽(25)
  • element-ui 設(shè)置table表頭固定

    element-ui 設(shè)置table表頭固定

    設(shè)置包裹table組件的標(biāo)簽flex:1 將table高度設(shè)為100% 統(tǒng)一設(shè)置樣式,在App.vue添加樣式: 對應(yīng)界面設(shè)置樣式

    2024年02月11日
    瀏覽(94)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包