1、例子1



import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Window 2.2

Window {
visible: true
width: 300
height: 450
title: qsTr("Hello World")

ListView{
id:listView
anchors.fill: parent
model: 10
snapMode: ListView.SnapOneItem
orientation:ListView.Horizontal
delegate: Rectangle{
width: listView.width
height: listView.height
color: index%2 ? "red":"yellow"
Label{
anchors.centerIn: parent
font.pointSize: 100
text: index
}
}
}
}


QML-ListView_c++

 

 

2、例子2



import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Window 2.2
ListView{
id:listView
anchors.fill: parent
model: 10
headerPositioning: ListView.PullBackHeader

header: Rectangle{
width: listView.width
height: 70
color: "green"
Label{
anchors.centerIn: parent
text: "this is header"
}
}

onCurrentIndexChanged: {
console.log("current index = ",currentIndex)
}

delegate: Rectangle{
width: listView.width
height: 280
color: index%2 ? "red":"yellow"
Label{
id:txt
anchors.centerIn: parent
font.pointSize: 100
text: index
}
Label{
: txt.bottom
font.pointSize: 30
text: "currentIndex = " + listView.currentIndex
anchors.horizontalCenter: parent.horizontalCenter
}
}
}


QML-ListView_#define_02

 3、例子3

 



ListView {
id: listView
clip: true
width: parent.width-1;
height: parent.height;
spacing :0
highlight: Rectangle {
width: listView.width
height: 40
color: "lightsteelblue"
radius: 5
Behavior on y {
SpringAnimation {
spring: 3
damping: 0.2
}
}
}
highlightFollowsCurrentItem: true
focus: true
delegate: Rectangle {
property color tempcolor: "transparent"
color: tempcolor
width: listView.width
height: 40
Row {
id: row1
anchors.fill: parent
spacing: 10
anchors.leftMargin: 10
Rectangle {
width: 30
height: 30
color: colorCode
radius: width/2;
anchors.verticalCenter: parent.verticalCenter

}
Text {
text: name
anchors.verticalCenter: parent.verticalCenter
font.bold: true
font.pointSize: listView.currentIndex == index ? 14 : 11
color: "white"
}
}
MouseArea{
anchors.fill: parent
hoverEnabled: true
onClicked: {
listView.currentIndex = index;
}
onEntered: {
tempcolor = "#a7e094"
}

onExited: {
tempcolor = "transparent"
}
}
}
model: ListModel {
ListElement {
name: "综合方舱门"
colorCode: "green"
}

ListElement {
name: "网络交换机"
colorCode: "red"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}
ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}
ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}
ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

ListElement {
name: "设备"
colorCode: "green"
}

}
}
Rectangle {
width: 1;
height: parent.height;
color: "gray";
anchors.right: parent.right;
}
}


QML-ListView_c++_03

 

4、例子4

QML-ListView_#include_04

动态生成一个界面,控制器颜色和文字内容【不能动态增加减少】

 

 

 ①、创建QAbstractListModel子类

paralistmodel.h



#ifndef PARALISTMODEL_H
#define PARALISTMODEL_H

#include <QAbstractListModel>

struct ParaModel
{
ParaModel()
{
paraName = "";
crState = "";
}
//核心属性
QString paraName;
QString crState;
};

class ParaListModel : public QAbstractListModel
{
Q_OBJECT
public:
ParaListModel(QObject* parent = 0);
enum Roles//qml用来识别别名的规则
{
paraNameRole = Qt::UserRole + 1,
colorRole
};
void addModel(const ParaModel &deviceList);//C++设置值
void update(int index, const ParaModel &paraModel);//C++更新
void clear();//清空

protected:
int rowCount(const QModelIndex &parent = QModelIndex()) const;//qml内部调用,不用多管直接重写即可
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;//qml内部调用,不用多管直接重写即可
QHash<int, QByteArray> roleNames() const;//qml内部调用,不用多管直接重写即可

private:
QList<ParaModel> m_data;
};

#endif // PARALISTMODEL_H


paralistmodel.cpp



#include "paralistmodel.h"

ParaListModel::ParaListModel(QObject *parent)
: QAbstractListModel(parent)
{

}

void ParaListModel::addModel(const ParaModel &paraModel)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_data << paraModel;
endInsertRows();
}

int ParaListModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return m_data.count();
}

QVariant ParaListModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= m_data.count())
return QVariant();

const ParaModel &paraModel = m_data[index.row()];
switch (role)
{
case paraNameRole:
return paraModel.paraName;
break;
case colorRole:
return paraModel.crState;
break;
default:
break;
}
return QVariant();
}

void ParaListModel::update(int index, const ParaModel &paraModel)
{
if (index < 0 || index >= m_data.count())
return;
ParaModel &srcModel = m_data[index];
if(paraModel.paraName != "")
{
srcModel.paraName = paraModel.paraName;
}
if(paraModel.crState != "")
{
srcModel.crState = paraModel.crState;
}
}

void ParaListModel::clear()
{
m_data.clear();
}

//qml通过这里的QByteArray来访问数据
//首先qml输入"value"知道其role为roles[valueRole],然后把valueRole输入到data函数返回真实值
QHash<int, QByteArray> ParaListModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[paraNameRole] = "paraName";
roles[colorRole] = "crState";
return roles;
}


 

②、创建PredictPara.qml,用于对listview的显示



import QtQuick 2.0

Rectangle {
id: root;
width: 300;
height: 400;
// color: "#222648";//背景色
color: Qt.rgba(0,0,0,0)
ListView {
anchors.fill: parent;
model: ParaListModel;
delegate: delegate_list
spacing: 0;
}
//委托
Component {
id: delegate_list;
Rectangle {
id: rect;
width: root.width;
height: 40;
color: Qt.rgba(0,0,0,0)
Rectangle {
id: round;
width: 30;
height: width;
radius: width/2;
color: crState;
anchors.verticalCenter: parent.verticalCenter;
anchors.left: parent.left;
anchors.leftMargin: 40;
}

Text {
id: para_name;
text: paraName;
font.pixelSize: 20;
anchors.centerIn: parent;
color: crState;
horizontalAlignment: Text.AlignLeft;
}
Rectangle {
width: parent.width;
height: 1;
color: "green";
anchors.bottom: parent.bottom;
}
}
}

}


标红的两个属性就是来自于c++类里的属性

③、main.cpp里设置上下文属性



void main_fun()
{  
QUrl source("qrc:/qml/PredictPara.qml");
ui->quickWidget_predict_para->setResizeMode(QQuickWidget::SizeRootObjectToView);
ui->quickWidget_predict_para->setSource(source);
ui->quickWidget_predict_para->setAttribute(Qt::WA_AlwaysStackOnTop);
ui->quickWidget_predict_para->setClearColor(QColor(Qt::transparent));

int paraCount = paras.size();
QStringList paraInfoList;
QString paraName;
BIT_State_Type cv;
std::pair<QString, QString> paraStatePair;
ParaListModel modelList;
for(int i=0;i<3;++i){
ParaModel model;
model.paraName = "name_1";
model.crState = "#ff0000";
modelList.addModel(model);
}
ui->quickWidget_predict_para->rootContext()->setContextProperty("ParaListModel", &modelList);
}


 




长风破浪会有时,直挂云帆济沧海!