Image.Stretch:图片拉伸自适应;(默认的)
Image.PreserveAspectFit:按比例缩放,不裁剪
Image.PreserveAspectCrop:均匀缩放,必要时裁剪
Image.Tile:像贴瓷砖一样
Image.TileVertically:水平拉伸,垂直平铺
Image.TileHorizontally:垂直拉伸,水平平铺
Image.Pad:原始图像不做处理
关于使用canvas绘画一个下拉箭头和左向箭头
indicator: Canvas {
id: idCanvas;
x: idComboxBoxCtrl.width - width - idComboxBoxCtrl.rightPadding + 5;
y: idComboxBoxCtrl.topPadding + (idComboxBoxCtrl.availableHeight - height +9) / 2;
width: 15;
height: 15;
contextType: "2d";
Connections {
target: idComboxBoxCtrl;
onPressedChanged: {
idCanvas.requestPaint()
onPaint: {
context.reset();
if(idComboBoxPopup.visible)
{
context.moveTo(0, 0);
context.lineWidth = 2;
context.lineTo(5, 4.8);
context.lineTo(10, 0);
else {
context.moveTo(10, 0);
context.lineWidth = 2;
context.lineTo(5, 4.8);
context.lineTo(10, 10);
context.strokeStyle = idComboxBoxCtrl.pressed ? "#EEEFF7" : "#999999";
context.stroke();
下面贴上整个comboBox的封装:
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQml 2.12
ComboBox {
id: idComboxBoxCtrl
leftInset: 0;
rightInset: 0
topInset: 0;
bottomInset: 0;
property int radius:6;
property ListModel dataModel: ({})
property string bgColor: "#00FFFF"
property string textColor: "#606266" //默认标题颜色
property string borderColor: "#637486" //默认颜色
property bool g_bPressed: false //是否选中下拉框
property int borderWidth: 2
property int popupHeight: 300 //默认弹出层高度
property string strSelectID: ""
signal sigItemSelected(int id,int pid,string itemText)//项选完成信号
model: dataModel
//设置文本
function setText(_text){
idComboxBoxCtrl.displayText = _text;
//获取文本
function getText(){
return idComboxBoxCtrl.displayText;
//设置ID
function setID(_id)
for(var i =0 ; i < idComboxBoxCtrl.model.count ; i++)
if(idComboxBoxCtrl.model.get(i).id === _id)
idComboxBoxCtrl.displayText = idComboxBoxCtrl.model.get(i).itemText;
idComboxBoxCtrl.currentIndex = i;
break;
return idComboxBoxCtrl.strSelectID = _id;
//获取ID
function getID(){
return idComboxBoxCtrl.strSelectID;
//清除文本
function clear(){
idComboxBoxCtrl.displayText = ""
//获取数据项
function getItem(_index){
return idComboxBoxCtrl.dataModel.get(_index);
//设置数据项
function setItem(_index){
let tmpItem = idComboxBoxCtrl.dataModel.get(_index);
idComboxBoxCtrl.setID(tmpItem.id);
idComboxBoxCtrl.setText(tmpItem.itemText);
//设置边框颜色
function setBorderColor(_color){
idComboBoxBackground.border.color = _color;
//设置背景颜色
function setBgColor(_color){
idComboxBoxCtrl.bgColor = _color;
//下拉项
delegate: ItemDelegate {
width: idComboxBoxCtrl.width
height: idComboxBoxCtrl.height - 10
contentItem: Text {
text: itemText
color: listview1.currentIndex === index ? "#ffffff" : textColor
font.pixelSize: idComboxBoxCtrl.font.pixelSize - 2;
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
MouseArea{
anchors.fill:parent
onClicked:
idComboxBoxCtrl.currentIndex = index
idComboxBoxCtrl.displayText = idComboxBoxCtrl.model.get(index).itemText;
idComboxBoxCtrl.strSelectID = id;
sigItemSelected(id,index,itemText) //发射选择完成信号
idComboBoxPopup.close() //选择后自动关闭弹出层
}catch(e){
idComboBoxPopup.close() //选择后自动关闭弹出层
indicator: Canvas {
id: idCanvas;
//使之居中
x: idComboxBoxCtrl.width - width - idComboxBoxCtrl.rightPadding + 5;
y: idComboxBoxCtrl.topPadding + (idComboxBoxCtrl.availableHeight - height +9) / 2;
width: 15;
height: 15;
contextType: "2d";
Connections {
target: idComboxBoxCtrl;
onPressedChanged: {
idCanvas.requestPaint()
onPaint: {
context.reset();
if(idComboBoxPopup.visible)
{//方向向下
context.moveTo(0, 0);
context.lineWidth = 2;
context.lineTo(5, 4.8);
context.lineTo(10, 0);
else { //方向向左
context.moveTo(10, 0);
context.lineWidth = 2;
context.lineTo(5, 4.8);
context.lineTo(10, 10);
context.strokeStyle = idComboxBoxCtrl.pressed ? "#EEEFF7" : "#999999";
context.stroke();
//显示文字
contentItem: Text {
leftPadding: 0
rightPadding: 0 //+ idComboxBoxCtrl.spacing
width: parent.width - 12
text: idComboxBoxCtrl.displayText //默认显示文字
font: idComboxBoxCtrl.font //字体
color: textColor //idComboxBoxCtrl.pressed ? "#666666" : "#999999" //字体颜色
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
anchors.left: idComboxBoxCtrl.left
anchors.leftMargin: 16
height: parent.height
background: Rectangle {
id:idComboBoxBackground
implicitWidth: 120
implicitHeight: 40
border.color: idComboxBoxCtrl.focus ? "#00BFB5" : "#637486" //边框颜色
border.width: idComboxBoxCtrl.visualFocus ? 2 : 2 //默认边框大小
radius: 5 //圆角
color: "#505D6E"
//弹出层
popup: Popup {
id:idComboBoxPopup
y: idComboxBoxCtrl.height - 1
width: idComboxBoxCtrl.width
height: contentItem.implicitHeight < popupHeight ? contentItem.implicitHeight : popupHeight
implicitHeight: contentItem.implicitHeight < 300 ? contentItem.implicitHeight : 300
implicitWidth: comtentItem.implicitWidth < 500 ? comtentItem.implicitWidth : 500
padding: 1
//弹出层列表内容
contentItem: ListView {
id:listview1
clip: true
implicitHeight: contentHeight //弹出层高度
model: idComboxBoxCtrl.popup.visible ? idComboxBoxCtrl.delegateModel : null //弹出列表数据源
currentIndex: idComboxBoxCtrl.highlightedIndex //当前选择项
ScrollIndicator.vertical: ScrollIndicator { } //滚动条
highlight: Rectangle {color: "#00BFB5"} //高亮背景
//弹出层背景
background: Rectangle {
border.color: borderColor //边框
radius: 5 //圆角
color: bgColor
写项目的时候发现,qml自带的comboBox在样式和功能上都不能满足我的要求,所以,干脆直接自己写了一个comboBox,想怎么设置都可以,为所欲为。
Rectangle {
id:comboBox
property alias currentIndex: listviewer.currentIndex //把currentInedx提出来,方便外部调用
prop...
ComboBox填充数据模型,数据模型通常是JavaScript数组,ListModel或者是整数,但是也支持其他类型的数据模型。另外,ComboBox还可以编辑
acceptableInput : bool,此属性控制组合框是否包含可编辑文本字段中的可接受文本
count : int,组合框中的项目数
currentIndex : int,保存组合框中当前项的索引,只读
currentText : string,组合框中当前项的文本,只读
delegate : Component,包含一个委托,该.
1、ListView的滚动条样式订制
2、基于(1、ListView的滚动条样式订制)实现一个简单的代理自定义ComboBox
3、基于(1、ListView的滚动条样式订制)实现一个复杂的代理TreeView
--------------------------------------------------------------
1、ListView的滚动条样式订制
因为 im
三、开启可编辑
QComboBox作为下拉列表框,也是常用的控件之一,最常见的就是win10文件浏览器上的地址输入栏、QQ登录框等。本篇文章将从以下几个方面介绍QComboBox:
一、添加纯文本item
QComboBox添加纯文本列表项可以单个插入(以QString方式)、多个插入(以QStringList方式)、单个指定位置插入、多个指定位置插入,代码如下:
//添加单个item
ui.Acquisition_M...
示例程序下载源码共包含两个文件:
1. ComboBoxXI.h
2. ComboBoxXI.cpp使用说明提供的接口void SetImageList(CImageList* pImageList);
CImageList* GetImageList() const;
int GetItemImage(int nIndex);
int SetItemImage(int
ComboBox是填充数据模型,数据模型通常是JavaScript数组,ListModel或者是整数,但是也支持其他类型的数据模型提供的属性。
QtQuick在Qt 5.7在Controls 2.5版本给出的ComboBox,它包括一下属性:
acceptableInput : bool此属性控制组合框是否包含可编辑文本字段中的可接受文本
count : int组合框中的项目数
currentIndex : int保存...