在做中大型项目时,可能又成百上千个功能界面,而这些功能界面无非就是数据的输入与输出,那么对常用的控件进行定制是非常重要的。本人认为Qt的原生控件使用起来有以下几点问题:
1、 Qt控件为了兼容各种情况,设计得是比较抽象的,对于新员工来说理解起来比较困难,接口调用也复杂;
2、 不同的人对代码理解不同,Qt的控件用起来也是各显神通,后期维护起来非常困难;
3、 每个公司的产品有自己的外观风格,定制控件可以同一实现外观,无需开发人员自己处理。
可能刚刚看感觉比想象中的复杂一点,但是只要多看几遍就会清楚为什么Qt的控件要这样设计,项绘制部分参考了网上的代码。
主要自定义两个类,CustomTree和CustomTreeItemDelegate,类关系如下图:
核心代码:
void
CustomTreeDelegate
::
paint
(
QPainter
*
painter
,
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
painter
-
>
setRenderHint
(
QPainter
::
Antialiasing
)
;
QColor colorBg
;
if
(
option
.
state
&
QStyle
::
State_Selected
)
colorBg
=
m_view
-
>
checkedBgColor
(
)
;
else
if
(
option
.
state
&
QStyle
::
State_MouseOver
)
colorBg
=
m_view
-
>
hoverBgColor
(
)
;
colorBg
=
m_view
-
>
bgColor
(
)
;
QRect
bgRect
(
0
,
option
.
rect
.
top
(
)
,
m_view
-
>
width
(
)
,
option
.
rect
.
height
(
)
)
;
painter
-
>
fillRect
(
bgRect
,
colorBg
)
;
if
(
option
.
state
&
QStyle
::
State_Selected
)
painter
-
>
setPen
(
Qt
::
NoPen
)
;
painter
-
>
setBrush
(
m_view
-
>
checkedTextColor
(
)
)
;
QVector
<
QPointF
>
points
;
points
.
append
(
QPointF
(
option
.
rect
.
right
(
)
,
option
.
rect
.
top
(
)
+
option
.
rect
.
height
(
)
*
0.3
)
)
;
points
.
append
(
QPointF
(
option
.
rect
.
right
(
)
,
option
.
rect
.
top
(
)
+
option
.
rect
.
height
(
)
*
0.7
)
)
;
points
.
append
(
QPointF
(
option
.
rect
.
right
(
)
-
option
.
rect
.
height
(
)
*
0.3
Qt-QTreeView自定义树控件在做中大型项目时,可能又成百上千个功能界面,而这些功能界面无非就是数据的输入与输出,那么对常用的控件进行定制是非常重要的。本人认为Qt的原生控件使用起来有以下几点问题:1、 Qt控件为了兼容各种情况,设计得是比较抽象的,对于新员工来说理解起来比较困难,接口调用也复杂;2、 不同的人对代码理解不同,Qt的控件用起来也是各显神通,后期维护起来非常困难;3、 ...
要想成为高级程序员,必须精通C++。大量第三方开源库使用C++编写。开发移动应用的一些核心功能必须使用C C++。Qt是大公司大量使用的跨平台c++库,号称工具软件之王。Qt作为一个如此高效,跨平台的GUI开发框架,如何快速掌握其精髓?写出高质量,复杂的交互?这是困扰很多中高级开发人员,很头疼的一个问题。在这个课程中,我们会给出非常好的答案。
为什么很多同学学了很多年编程,看了很多书,教程,还是不会写,只能在网络上copy代码?或者自己没有动手能力,遇到稍微复杂的东西就束手无策?为什么那些高效率学习的人,能在三五天内掌握Qt,并开始写软件,做项目?一个类似Qt这样的开发框架,几千个API,如何学习?为什么我们同学学习了一两年Qt C++还糊里糊涂,有的人只需要几天时间就掌握Qt的精髓?通过这个系列课程的学习,让学员深入理解一套GUI开发框架,编程思想。并将这套思想应用到任何平台的开发中,例如iOS,Android。
理解这套编程思想,日后可以运用于快速学习任何一套新的东西,框架。
通过这一系列课程的训练,希望大家能达到无招胜有招的境界。达到以后遇到任何客户端软件,拍着胸脯说,我
环境:Win10 + Visual Studio 2019 + Qt 5.14.0
最近做Qt开发,为了要实现QWidget的鼠标点击事件,写了继承自QWidget的自
定义
类MyWidget,然后在Qt Designer界面将QWidget提升为MyWidget。但是运行时候出现了问题:
就是我提升为MyWidget的那个QWidget
控
件的提升之前设置的QWidget的灰色边框消失了(但是鼠标点击事件正常),没有提升为MyWidget的QWidget
控
件没事。然后采取了以下措...
1.1要更改QTreeView的展开节点箭头小图标,用QSS主要用如下语句:"QTreeView::branch:open:has-children:!has-siblings,"
"QTreeView::branch:open:has-children:has-siblings {image: url(:res/recoverydata/icon/icon_list_2.png);}"
"QTr...
QtreeView是ui中最常用的
控
件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点)。
1. QStandardItemModel在QTreeView中的使用
使用QTreeView的对应模型是QStandardItemModel,这个是Qt对应ui界面最有用
Tree view与Tree Widget 相比而言,需要为tree view 设置一个model。使用tree view 能有效降低内存的使用率。但是需要自
定义
model。下面参考Qt官方提供的demo,讨论如何自
定义
Tree View Model。
依据名为simple tree model官方demo可知道:要自
定义
tree view model需要
定义
一个
树
形结构的底层数据结构,该类型结...
Qt是一种流行的跨平台C++应用程序框架,在GUI开发方面非常出色。Qt包含大量的
控
件,其中一个是
树
形
控
件QTreeView。这个
控
件允许用户显示带有
树
形视图的数据模型,它是QAbstractItemView的派生类之一。
QTreeView
控
件具有以下特点:
1. 显示数据模型 - QTreeView
控
件显示
控
件绑定的数据模型。用户可以打开和关闭节点以显示或隐藏子节点。
2.
树
的构建 -
树
的层次结构是通过节点之间的父子关系来
定义
的。最上面的节点称为根节点,其余的为子节点。
3. 定制化 - QTreeView
控
件可以被用户定制。用户可以通过设置
控
件的颜色、字体、大小和对齐方式等来将
控
件表现为自己想要的样子。
4. 功能强大 - QTreeView
控
件有很多内置的功能,包括可排序、可过滤、可编辑等等。它也允许用户通过自
定义
delegate,来实现额外的交互行为。
下面是一些使用QTreeView
控
件的示例:
1. 创建一个QTreeView
控
件:
QTreeView *treeView = new QTreeView(parent);
2. 设置它的数据模型:
QStandardItemModel *model = new QStandardItemModel(parent);
treeView->setModel(model);
3. 填充数据模型:
QStandardItem *rootItem = model->invisibleRootItem();
QStandardItem *item1 = new QStandardItem("Item 1");
QStandardItem *item2 = new QStandardItem("Item 2");
rootItem->appendRow(item1);
rootItem->appendRow(item2);
4. 显示
控
件:
treeView->show();
QTreeView
控
件是一个非常强大的
控
件,可以用于各种情况下。它可以轻松地显示大量的数据,并让用户轻松地翻阅它们。在GUI开发中,QTreeView
控
件是一个非常有用的
控
件。