From 7478bb8f34ad82207e82906ca33d529934523778 Mon Sep 17 00:00:00 2001 From: touwoyimuli Date: Tue, 10 Sep 2019 00:59:10 +0800 Subject: [PATCH] feat: QTreeWidget and QDockWidget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QTreeWidget(目录树组件) and QDockWidget(停靠区域组件)的介绍和使用 --- QtQTreeWidgetEx/ExQTreeWidget.cpp | 298 +++++++++++++++++++++++++++ QtQTreeWidgetEx/ExQTreeWidget.h | 66 ++++++ QtQTreeWidgetEx/ExQTreeWidget.ui | 305 ++++++++++++++++++++++++++++ QtQTreeWidgetEx/QtQTreeWidgetEx.pro | 45 ++++ QtQTreeWidgetEx/image/Image001.jpg | Bin 0 -> 669 bytes QtQTreeWidgetEx/image/Image002.jpg | Bin 0 -> 877 bytes QtQTreeWidgetEx/image/Image003.jpg | Bin 0 -> 953 bytes QtQTreeWidgetEx/image/Image004.jpg | Bin 0 -> 957 bytes QtQTreeWidgetEx/image/Image005.jpg | Bin 0 -> 592 bytes QtQTreeWidgetEx/image/Image006.jpg | Bin 0 -> 866 bytes QtQTreeWidgetEx/image/Image007.jpg | Bin 0 -> 827 bytes QtQTreeWidgetEx/image/Image008.jpg | Bin 0 -> 1009 bytes QtQTreeWidgetEx/image/Image009.jpg | Bin 0 -> 776 bytes QtQTreeWidgetEx/image/Image010.jpg | Bin 0 -> 778 bytes QtQTreeWidgetEx/image/Image011.jpg | Bin 0 -> 943 bytes QtQTreeWidgetEx/image/Image012.jpg | Bin 0 -> 949 bytes QtQTreeWidgetEx/image/Image013.ico | Bin 0 -> 4286 bytes QtQTreeWidgetEx/image/Image014.jpg | Bin 0 -> 792 bytes QtQTreeWidgetEx/image/Image015.jpg | Bin 0 -> 729 bytes QtQTreeWidgetEx/image/Image016.jpg | Bin 0 -> 607 bytes QtQTreeWidgetEx/main.cpp | 11 + QtQTreeWidgetEx/qt.ico | Bin 0 -> 4286 bytes QtQTreeWidgetEx/resources.qrc | 20 ++ QtQlistWidgetEx/QtQlistWidgetEx.pro | 2 +- README.md | 2 + 25 files changed, 748 insertions(+), 1 deletion(-) create mode 100644 QtQTreeWidgetEx/ExQTreeWidget.cpp create mode 100644 QtQTreeWidgetEx/ExQTreeWidget.h create mode 100644 QtQTreeWidgetEx/ExQTreeWidget.ui create mode 100644 QtQTreeWidgetEx/QtQTreeWidgetEx.pro create mode 100644 QtQTreeWidgetEx/image/Image001.jpg create mode 100644 QtQTreeWidgetEx/image/Image002.jpg create mode 100644 QtQTreeWidgetEx/image/Image003.jpg create mode 100644 QtQTreeWidgetEx/image/Image004.jpg create mode 100644 QtQTreeWidgetEx/image/Image005.jpg create mode 100644 QtQTreeWidgetEx/image/Image006.jpg create mode 100644 QtQTreeWidgetEx/image/Image007.jpg create mode 100644 QtQTreeWidgetEx/image/Image008.jpg create mode 100644 QtQTreeWidgetEx/image/Image009.jpg create mode 100644 QtQTreeWidgetEx/image/Image010.jpg create mode 100644 QtQTreeWidgetEx/image/Image011.jpg create mode 100644 QtQTreeWidgetEx/image/Image012.jpg create mode 100644 QtQTreeWidgetEx/image/Image013.ico create mode 100644 QtQTreeWidgetEx/image/Image014.jpg create mode 100644 QtQTreeWidgetEx/image/Image015.jpg create mode 100644 QtQTreeWidgetEx/image/Image016.jpg create mode 100644 QtQTreeWidgetEx/main.cpp create mode 100644 QtQTreeWidgetEx/qt.ico create mode 100644 QtQTreeWidgetEx/resources.qrc diff --git a/QtQTreeWidgetEx/ExQTreeWidget.cpp b/QtQTreeWidgetEx/ExQTreeWidget.cpp new file mode 100644 index 0000000..abc3a27 --- /dev/null +++ b/QtQTreeWidgetEx/ExQTreeWidget.cpp @@ -0,0 +1,298 @@ +#include "ExQTreeWidget.h" +#include "ui_ExQTreeWidget.h" + +ExQTreeWidget::ExQTreeWidget(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::ExQTreeWidget) +{ + ui->setupUi(this); + setWindowTitle(QObject::tr("QTreeWidget和QDockWidget的讲解和使用")); + + setCentralWidget(ui->scrollArea); //设置scrollArea为中心控件 + initTree(); + + m_labFlie = new QLabel("当前文件的路径:", this); + ui->statusBar->addWidget(m_labFlie); +} + +ExQTreeWidget::~ExQTreeWidget() +{ + delete ui; +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//初始化根节点(只能够有唯一) +void ExQTreeWidget::initTree() +{ + //准备工作 + ui->treeFiles->clear(); + QString dataStr = ""; + QIcon icon; + icon.addFile(":/image/Image001.jpg"); + + //创建唯一root的节点 + QTreeWidgetItem* root = new QTreeWidgetItem(treeItemType::itemRoot); + root->setIcon(treeColNum::colItem, icon); + root->setText(treeColNum::colItem, QString("相簿")); + root->setText(treeColNum::colItemType, QString("treeItemType")); + root->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate); + root->setCheckState(treeColNum::colItem, Qt::Unchecked); + root->setData(treeColNum::colItem, Qt::UserRole, QVariant(dataStr)); + + //添加顶层节点 + ui->treeFiles->addTopLevelItem(root); +} + +//添加目录节点 +void ExQTreeWidget::addFolderItem(QTreeWidgetItem *parItem, QString dirName) +{ + QIcon icon; + icon.addFile(":/image/Image006.jpg"); + + //添加一个新的节点 + QTreeWidgetItem* item = new QTreeWidgetItem(treeItemType::itemFile); + QString folderName = getFinalFolderName(dirName); + item->setIcon(treeColNum::colItem, icon); + item->setText(treeColNum::colItem, folderName); + item->setText(treeColNum::colItemType, QString("treeItemType")); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate); + item->setCheckState(treeColNum::colItem, Qt::Unchecked); + item->setData(treeColNum::colItem, Qt::UserRole, QVariant(dirName)); + + //添加子节点 + if (parItem->type() == treeItemType::itemFile) { //若是文件节点 + parItem->addChild(item); + } else if (parItem->type() == treeItemType::itemRoot) { //若是唯一root节点 + QTreeWidgetItem *root = ui->treeFiles->topLevelItem(0); + root->addChild(item); + } + +} + +//添加图片节点 +void ExQTreeWidget::addImageItem(QTreeWidgetItem *parItem, QString fileName) +{ + if (parItem == nullptr) + return; + + QIcon icon; + icon.addFile(":/image/Image014.jpg"); + + //添加一个新的节点 + QTreeWidgetItem* item = new QTreeWidgetItem(treeItemType::itemImage); + QString folderName = getFinalFolderName(fileName); + item->setIcon(treeColNum::colItem, icon); + item->setText(treeColNum::colItem, folderName); + item->setText(treeColNum::colItemType, QString("treeItemType")); + item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsAutoTristate); + item->setCheckState(treeColNum::colItem, Qt::Unchecked); + item->setData(treeColNum::colItem, Qt::UserRole, QVariant(fileName)); + + //添加子节点 + if (parItem->type() == treeItemType::itemFile) { //若是文件节点 + parItem->addChild(item); + } else if (parItem->type() == treeItemType::itemRoot) { //若是唯一root节点 + QTreeWidgetItem *root = ui->treeFiles->topLevelItem(0); + root->addChild(item); + } +} + +//从完整的路径里面,获取最后的文件夹名称 +QString ExQTreeWidget::getFinalFolderName(const QString &pathName) +{ + QString path = pathName; + int cnt = pathName.count(); + int i = pathName.lastIndexOf("/"); + QString str = pathName.right(cnt - i - 1); + return str; +} + +//遍历传进来的父节点下的所有子节点;每遍历过该节点,就在其节点的信息加一个# +void ExQTreeWidget::changeItemCaption(QTreeWidgetItem *parItem) +{ + QString str = "# " + parItem->text(treeColNum::colItem); + parItem->setText(treeColNum::colItem, str); + + if (parItem->childCount() < 0) + return; + + for (int i = 0; i < parItem->childCount(); i++) { + changeItemCaption(parItem->child(i)); //回调,调用自己 + } +} + +//显示当前item的图片(默认以适配高度) +void ExQTreeWidget::displayImage(QTreeWidgetItem *item) +{ + QString fileName = item->data(treeColNum::colItem, Qt::UserRole).toString(); + m_labFlie->setText(fileName); + m_curPixmap.load(fileName); //从文件载入图片 + on_actAdaptiveHeight_triggered(); //自动适应高度显示 + + ui->actAmplification->setEnabled(true); + ui->actShrink->setEnabled(true); + ui->actZoomRealSize->setEnabled(true); + ui->actAdaptiveHeight->setEnabled(true); + ui->actAdaptiveWidth->setEnabled(true); +} + +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//增加文件夹 +void ExQTreeWidget::on_actAddFolder_triggered() +{ + QString path = QFileDialog::getExistingDirectory(); //选择目录 + + if (! path.isEmpty()) { + QTreeWidgetItem* item = ui->treeFiles->currentItem(); //获取当前节点 + + if(item != nullptr) + addFolderItem(item, path); + } +} + +//添加图片 +void ExQTreeWidget::on_actAddFile_triggered() +{ + QStringList list = QFileDialog::getOpenFileNames(this, "选择多个将要加载的图片", "", "Images(*.jpg, *.png, *.*)"); //选择目录 + + if (! list.isEmpty()) { + QTreeWidgetItem* parItem = nullptr; + QTreeWidgetItem* item = ui->treeFiles->currentItem(); //获取当前节点 + + if (item == nullptr) + return; + + if (item->type() == treeItemType::itemImage) { //获得父节点 + parItem = item->parent(); + } else { + parItem = item; + } + + for (int i = 0; i < list.size(); i++) { + QString strName = list.at(i); //获得文件名称 + addImageItem(parItem, strName); //添加图片文件到文件节点 + } + } +} + +//删除节点 +void ExQTreeWidget::on_actDeleFile_triggered() +{ + QTreeWidgetItem* parItem = nullptr; + QTreeWidgetItem* currItem = ui->treeFiles->currentItem(); + + if (currItem->type() != treeItemType::itemRoot) + parItem = currItem->parent(); //只能够由其父节点删除 +// else +// ui->treeFiles->takeTopLevelItem(0); //删除顶层节点使用这个 + + if (currItem == nullptr || parItem == nullptr) + return; + + parItem->removeChild(currItem); //移除没有从内存中删除,所以delete删除 + delete currItem; +} + +//遍历所有的顶层节点(本处只有一个root顶层节点) +void ExQTreeWidget::on_actScanItems_triggered() +{ + for (int i = 0; i < ui->treeFiles->topLevelItemCount(); i++) { + QTreeWidgetItem* currItem = ui->treeFiles->topLevelItem(i); //顶层item + changeItemCaption(currItem); + } +} + +//图片自动适应高度 +void ExQTreeWidget::on_actAdaptiveHeight_triggered() +{ + int height = ui->scrollArea->height(); //得到scrollArea的高度 + int realHeight = m_curPixmap.height(); //原始图片的实际高度 + m_ratio = height * 1.0 / realHeight; //当前显示比例,必须转换为浮点数 + + QPixmap pixmap = m_curPixmap.scaledToHeight(height - 50); //图片缩放到指定高度 + ui->labDisplay->setPixmap(pixmap); //设置Label的PixMap +} + +//图片自动适应宽度 +void ExQTreeWidget::on_actAdaptiveWidth_triggered() +{ + int width = ui->scrollArea->width(); + int realWidth = m_curPixmap.width(); + m_ratio = width * 1.0 / realWidth; + + QPixmap pixmap = m_curPixmap.scaledToHeight(width - 50); + ui->labDisplay->setPixmap(pixmap); +} + +//当前节点变化的时候,自动加载当前图片 +void ExQTreeWidget::on_treeFiles_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) +{ + if (current != nullptr && previous != nullptr) { + displayImage(current); + } +} + + +//放大 +void ExQTreeWidget::on_actAmplification_triggered() +{ + m_ratio *= 1.2; //在当前比例基础上乘以0.8 + int height = m_curPixmap.height() * m_ratio; // 显示宽度 + int widht = m_curPixmap.width() * m_ratio; // 显示宽度 + + QPixmap pix = m_curPixmap.scaled(widht, height); //图片缩放到指定高度和宽度,保持长宽比例 + ui->labDisplay->setPixmap(pix); + +} + +//缩小 +void ExQTreeWidget::on_actShrink_triggered() +{ + m_ratio *= 0.8; + int height = m_curPixmap.height() * m_ratio; + int widht = m_curPixmap.width() * m_ratio; + + QPixmap pix = m_curPixmap.scaled(widht, height); + ui->labDisplay->setPixmap(pix); +} + +//还原 +void ExQTreeWidget::on_actZoomRealSize_triggered() +{ + m_ratio = 1; + int height = m_curPixmap.height(); + int widht = m_curPixmap.width(); + + QPixmap pix = m_curPixmap.scaled(widht, height); + ui->labDisplay->setPixmap(pix); +} + +//设置Dock窗口是否浮动 +void ExQTreeWidget::on_actDockFloating_triggered(bool check) +{ + ui->dockWidget->setFloating(check); +} + +//设置Dock窗口是否隐藏不显示 +void ExQTreeWidget::on_actDockVisible_triggered(bool checked) +{ + ui->dockWidget->setVisible(!checked); +} + +//退出 +void ExQTreeWidget::on_actQiut_triggered() +{ + close(); +} + +//单击DockWidget组件的标题栏的关闭按钮时候,会隐藏在停靠区域,并且发射信号visibilityChanged; 停靠区域可见性变化 +void ExQTreeWidget::on_dockWidget_visibilityChanged(bool visible) +{ + ui->actDockVisible->setChecked(visible); +} + +//当拖动DockWidget组件,使其浮动或者停靠时候,会发射信号topLevelChanged; 更新其Action的状态 +void ExQTreeWidget::on_dockWidget_topLevelChanged(bool topLevel) +{ + ui->actDockFloating->setChecked(topLevel); +} diff --git a/QtQTreeWidgetEx/ExQTreeWidget.h b/QtQTreeWidgetEx/ExQTreeWidget.h new file mode 100644 index 0000000..c4400a6 --- /dev/null +++ b/QtQTreeWidgetEx/ExQTreeWidget.h @@ -0,0 +1,66 @@ +#ifndef EXQTREEWIDGET_H +#define EXQTREEWIDGET_H + +#include +#include +#include +#include + +namespace Ui { +class ExQTreeWidget; +} + +class ExQTreeWidget : public QMainWindow +{ + Q_OBJECT + +public: + + enum treeItemType { //枚举,节点类型 + itemRoot, + itemFile, + itemImage + }; + + enum treeColNum { //目录树列表的编号 + colItem = 0, + colItemType = 1 + }; + + explicit ExQTreeWidget(QWidget *parent = nullptr); + ~ExQTreeWidget(); + + void initTree(); //初始化根节点(唯一) + void addFolderItem(QTreeWidgetItem *parItem, QString dirName); //添加目录 + void addImageItem(QTreeWidgetItem *parItem, QString fileName); //添加图片文件 + QString getFinalFolderName(const QString &pathName); //从完整的路径里面,获取最后的文件夹名称 + void changeItemCaption(QTreeWidgetItem* parItem); //遍历item下面的所有节点 + void displayImage(QTreeWidgetItem* item); //显示当前item的图片(默认以适配高度) + +private slots: + void on_actAddFolder_triggered(); //增加文件夹 + void on_actAddFile_triggered(); //添加图片文件 + void on_actDeleFile_triggered(); //删除节点 + void on_actScanItems_triggered(); //遍历所有的顶层节点(本处只有一个root顶层节点) + void on_actAdaptiveHeight_triggered(); //图片自动适应高度 + void on_actAdaptiveWidth_triggered(); //图片自动适应宽度 + void on_actAmplification_triggered(); //放大 + void on_actShrink_triggered(); //缩小 + void on_actZoomRealSize_triggered(); //还原 + void on_actDockFloating_triggered(bool check); //设置Dock窗口是否浮动 + void on_actDockVisible_triggered(bool checked); //设置Dock窗口是否隐藏不显示 + void on_actQiut_triggered(); //退出 + void on_treeFiles_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); //当前节点变化的时候,自动加载当前图片 + void on_dockWidget_visibilityChanged(bool visible); //单击DockWidget组件的标题栏的关闭按钮时候,会隐藏在停靠区域,并且发射信号visibilityChanged; 停靠区域可见性变化 + void on_dockWidget_topLevelChanged(bool topLevel); //当拖动DockWidget组件,使其浮动或者停靠时候,会发射信号topLevelChanged; 更新其Action的状态 + +private: + Ui::ExQTreeWidget *ui; + + QLabel *m_labFlie; //状态栏显示当前文件路径 + QPixmap m_curPixmap; //显示当前文件图片 + float m_ratio; //图片缩放比例 + +}; + +#endif // EXQTREEWIDGET_H diff --git a/QtQTreeWidgetEx/ExQTreeWidget.ui b/QtQTreeWidgetEx/ExQTreeWidget.ui new file mode 100644 index 0000000..bca496f --- /dev/null +++ b/QtQTreeWidgetEx/ExQTreeWidget.ui @@ -0,0 +1,305 @@ + + + ExQTreeWidget + + + + 0 + 0 + 851 + 564 + + + + ExQTreeWidget + + + + + + + true + + + + + 0 + 0 + 556 + 449 + + + + + + + + + + Qt::AlignCenter + + + + + + + + + + + + + 0 + 0 + 851 + 23 + + + + + 文件 + + + + + + + + + + 视图 + + + + + + + + + + + 工具 + + + + + + + + + + + + + true + + + Qt::ToolButtonTextUnderIcon + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + 节点 + + + + + 节点类型 + + + + + + + + + + + :/image/Image016.jpg:/image/Image016.jpg + + + 添加文件夹 + + + 添加文件夹 + + + + + + :/image/Image007.jpg:/image/Image007.jpg + + + 添加文件 + + + 添加文件 + + + + + + :/image/Image005.jpg:/image/Image005.jpg + + + 删除文件 + + + 删除文件 + + + Del + + + + + + :/image/Image008.jpg:/image/Image008.jpg + + + 遍历节点 + + + 遍历节点 + + + + + + :/image/Image012.jpg:/image/Image012.jpg + + + 放大 + + + 放大图片 + + + + + + :/image/Image011.jpg:/image/Image011.jpg + + + 缩小 + + + 缩小图片 + + + + + + :/image/Image002.jpg:/image/Image002.jpg + + + 实际大小 + + + 还原成实际大小 + + + + + + :/image/Image009.jpg:/image/Image009.jpg + + + 最佳高度 + + + 缩放到最佳高度 + + + + + + :/image/Image010.jpg:/image/Image010.jpg + + + 最佳宽度 + + + 缩放至最佳宽度 + + + + + true + + + + :/image/Image015.jpg:/image/Image015.jpg + + + 窗口浮动 + + + 窗口浮动开关 + + + + + true + + + + :/image/Image003.jpg:/image/Image003.jpg + + + 隐藏 + + + 窗口隐藏 + + + + + + :/image/Image004.jpg:/image/Image004.jpg + + + 退出 + + + 退出本程序 + + + + + + + + + diff --git a/QtQTreeWidgetEx/QtQTreeWidgetEx.pro b/QtQTreeWidgetEx/QtQTreeWidgetEx.pro new file mode 100644 index 0000000..f965bc2 --- /dev/null +++ b/QtQTreeWidgetEx/QtQTreeWidgetEx.pro @@ -0,0 +1,45 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2019-09-04T00:32:28 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = QtQTreeWidgetEx +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +CONFIG += c++11 + +SOURCES += \ + main.cpp \ + ExQTreeWidget.cpp + +HEADERS += \ + ExQTreeWidget.h + +FORMS += \ + ExQTreeWidget.ui + +RC_ICONS += qt.ico + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target + +RESOURCES += \ + resources.qrc diff --git a/QtQTreeWidgetEx/image/Image001.jpg b/QtQTreeWidgetEx/image/Image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a9cf41d514e8f6822fc94c8ddbe3c175f39144e3 GIT binary patch literal 669 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfq{vckpT&?vN5o*a{{IG1sIqZnOK<_SvjH7 zj7&h+GYASP8nOv1IkE>P7ETmVb_!}*c<|x}pawCZuThL*U||5+p&-ZzG>L_Y8Ey+B zgCG;Lu;N4(A;-jx|8Fty0G+@j$SlZU&+zi^zyA#Gm$%*OdiAPh>5}EK#eNSaG|Xu` zT;!?1V6O5otoinI*O=8SGc?}2E!wmyv`J#$X`|O=3L0k?FdMmB=wCmlw8e?x?5x5` zeg55vZfDbGJr8hDVB9ll;-luj2fiLQnJ;tj?s3&0J`FFA?mH119DC;W3I2_7fBTPR zG0a%3tIhM%?%}5+9lPh|KHA?}zb9>a-@JL3Rf_yxeYDKGA^FVcbeUXxeIH*5OMgIi zXhcWI!snBp9>4tUU`)l1?q^Hy?GEj_GRg4%K6ATf@7#u1{R;0|(_(+MX_uttiLtD# z>3gn!xjpN5h``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfq{vckpT&?u`{!BZ~~?D1Q?hYnOK>a*;%2| zj7-cdf()!|LXL`t>`IA1XBs&bHU78B7+c{(#DI*K%*8O{P6!40}s$WOoGgU4E78!uhp)2d`eC#Vo}we zLkn(6Ww_ql>(9XF`GSr0=|`@0QYS9oD`MqY@OyLEZrit4B%R){Gwu2uu*Y+@r$ox? zwdGJ0cCc(Nqk17}SE#aSKnZKp~@wyuSe;tqKcjkL*VRLAj?0=I<1Q|3o0UFU`3?U<`J9wXk3pHl$VX-e>y-HTP&R+ZN z+t*|5(`IIQb6!p9XxewS^-5o!<$*8rzamyN5GvCKbFAJiBbGW1I0!0~5~!AIfeNn7;mh69CgFJ4gTk literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image003.jpg b/QtQTreeWidgetEx/image/Image003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..334a52b444175b8ed09bed9f1e747c48f97672a4 GIT binary patch literal 953 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfq{vckpT&?u>+mR36xS7U|?cmVqj%qW`rtW zWCBVFGO)1=DGDnYIf{rHss;iTiZe2x8o>Zk2$awi1hQCISlHpl10@((1Pz509Rr0E zAAS%~Dr}s%@Z$el3_L&+m;{*x8SEKe%ru|VF&bzOU>xFK#jhd$WTsJ)5 zFXYgLc|Ur;FY5cSSj*tzt&J@8=Zsa~z3RQaapuiRBTkiN*$0lw>l;m)^nJ%g(TmM$ zZF}9qZhko+#5+@d#+y5R)@B8Fws&t&ZD=Gv(1Z#I^#*}q)qX<=EG+oxK$O`Z~N$zK+B z+Q;zw=3S3kd)8~prI05QF-MEO=mdV|;hV(~Q7OR0QOSP(l;-u~g4LVPd`yu#l3Q(X z*Q#=oP3z1}#u3?#F)FKhChfMm&bVD$^LxjsWqZ#=-&EUvIcLI&tCcxLE|*lwvy6F@ z*qU@M_t=~tI}_)Y+=9M@2%)(91TAqJ6}06A{`&eEia&(dFS{HlJ=_^jgO z;V7rP)@<3>dGoC0`=`y0CP`Qn-0lLyZ}Mb>3m$GT77VlV4pec74o zxJ+|GMQI-2s;kYCK~h&2Ml9@ga+k?s2w-bqs9@k@x$>aWp;vdqUweT`msU>m^f``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAbfdS|;1|-17&dR~S$O4qp5dg|D0$t3=#12uw z$OLpg8@nKbkfN}Xp`(asqKcDiU}57$plWfDpBa%1VqjroVg^d62m(b}fnJA8f{YPV zWH5AO6$+fFl(_NW|62?^KxrmHW&cS4f7YB zK7ZoXym`B7RxAy67QWGD-2HCa_s3JNwEFuko6GZR#X{?&XWPEraKFyaywv%nj^4yG zFZc9mi~EaKq-7q-32IHs_kGIo^3(^fO&eKiKVR+X*gfytxAmXa|9z>>m(I6qQjcYo zrMGrm$X2P4BeyrLdimb%U7Hz88^g!*{rfs~^L0J8)`@klp6p{66}njDn!)s}UD38j z9W#?dQW7ja9@dQWFPdifXj`ajc=|C_*4?$+@8AC%YgKbA%I^1Z9;Mcn!`trl-;tX7 z?dYCM9>;$%e5%{uVO#WGOlS^> RH54hNU3;!L|8(~Mn*a*IWqbet literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image005.jpg b/QtQTreeWidgetEx/image/Image005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6b06e293bc1d5caac20f7bc2548ae4091cc533f GIT binary patch literal 592 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 literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image009.jpg b/QtQTreeWidgetEx/image/Image009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d7a9f037d1d1be7619e4cf01b853afd27f85816 GIT binary patch literal 776 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfq{vckpT&?uraW*a{{IG1sIr^7@1gDn7E# z!z;ObbARUEoppat{diNWA$NB7b=8OkYq>PjC%Gpvty-Zn$$>$rx?tU(mlp*Un1g~Q z?lmha|M%@t@ycs@VXqw6k9>{Dv90d?k$U>to*y|4$L}=tMR~p3x-M#6jx)4bS`U8k7Ug|XHLJjt4m*XoisklwLh}Qka1h$ ze!o+GPqdgsLMpOfO`m?Vz)s@W=Bq99@BVC8sIJ+;W>>uE_^H3X%5u*ZO3!!P@%HGx zjr->udzrJ&+y9~BmB?LJ?`2tJi@U0BSCH;Fb5zFd>=Vw|M&%;5C$e)71YMPw{bSG8 z(w#kfyMtw$!Bt%s`kaN`}BbK!}H!N z7Vn%s{T5wiXqZqO@kiFHT*Ep0wY}R#mlYx>FDzcYG-LxqYtkvn1AGT7vM1-oJzdmO zE_FUE|IOmJeD0m``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}q8->{Lbu1Yl!fVCMwN=nF6~F)=Z+Ffg-nLSz}4 zm|0oa1R2av@h%h1>1J(i(6~q+1#lXYN2y_FpAcH-_ zSH5@e`P#M{+uIw#}1`eN5~&-KJuglJaoLskA0d?~a+1 z=c|SrdWlRtEOEcD#-Ab6`utM2)+IMLbpD(t@xlK1x=9z}9=sKu@$G8mk8PndwV(D+ zZZ$e9(tTd0J;?DJ$CtXf&hvL%y!N(a*59e?^hEETi4+dKc3vT}=o&*?vV{Ga6Dn?6 zwhf+-8$7r_Tz{&czxKc%!`|~bD*qYEKk_zy{Z+#8`&_qt_P0!l-xe)Jb;B!o6Jv2e~uau&c zbs4_Nt4_C{)W65fHq%b(tKpHt===x&>bK;!x5|Gny|A@6X}$Zxqsx~cwfGS*O>3>P ew@TleIM0-cCo5IT)5<5FOixQoitJSUe-i*^&l9x( literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image011.jpg b/QtQTreeWidgetEx/image/Image011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e16b5900a8e047603a7c2efe711ec2d1746f3b7b GIT binary patch literal 943 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAbfsuiUnUMhjI9S;jnb=u?a)ts7Obo1yEI{`{ zr5Txk&Sw);WMCIE6jm~FbP7x?@niv-9tgjqlqD;onNJ5WYl5GcjS z!~!>q0ce;Yiy{N7p(C4+aNt6t#KMOk{@-HY0lJ1skXewyo+0PGa78%p)3S57ruCfh zDw%5Y;Y!wo#_(|VHLGq3HgPZ{Yz({JZXIgxn-o0zxr(0En!TCFHg`)jJwJMycm0$4 z+P$+^2&!Crx74*uF(%VmFxe-;TI{NG!ndX!#ZT9-yIiQN-4te{d1AZ443~n73pzQn zkL^4e;CSNPV&BcSV$=5J`;^|gm0t2DZW7ZTPmX4bMad=NmiOCp{T9{iy6(Mno9Qve zD`A!FT5geYhqoDS7ydo>Ua4Q*a_g+S{=Bb?GLjC>31XPpzHElXX$D6LNo7lhmFjDq z^q%+bTKzEod-BvB%jzG=-A{>|;O%+DFtqf=zBxJKpWd#w-%%U}957#J>O+``OKFuD1v!sIX`>xU~o9L}zrtt8K-W|fh? z=zLGJ=*~Lz+bNtaar(k@R(%WqeLI}j;Am-t^UU}8{<%x{w5^P`*4TAw&$|>S2mNx6 zht;qq|D1vP@Fa`L%Q!L``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfsuikk&yubIGEVj8Cii+`T`7046KZ7EUc_h zSw<$H>)8Yq8Q6t{l?;s>0~0xvoq`IBCN4a95vV}|Xbv;7Q4DMhjI8WH84W=OCME_J z7B*&>JwT%bS%efF8CVSq*@Tsh0v9Ge{P6!40}s#uCP8LF2788__rew7yid!{-I~^O z#;ati&4(*l6B@(A*;j^cQDzZfIGD6{Jzv@K!yANx(sZJ7F9x<2D8!W1<>$cyX2Dr>Qt9UF~F>_X0;^KfFo-3=2^@5CERsZT1;J%rX z!|mC2*lXjOEVE5do?iLo+g!zWD|BMTop+yC6@Rt79rmgsKYFsWn8>3EEN5&@4jhYM z;y7?p@&v1=)fJ_86}OkxP5sYMW*Oa;{!j7kH`iyJnHFtY>-MalF3tMaCj0(7x!p>K zXSTnzXyIG?z0P)9{E4L#7tP|7**{fTA^A!Jqgc7pi@C33E3D5ZyH+f9J^f4}iQU1s zIiBI__2)gyE29_ApS^zX&CK&_&2|N>IU}+BsZWD};X=kO%q#_yn=d)4tw||A9Qd&9 z+FvslI}xAah4aGdHt~eL{pJ5Sg|j72UwF={AK|}m=}9Gaz1q-T{OsQS-X(k5)TTaZ z%2Ya++ho8n_pCt1+!L!`U+?ap?XhB|j;C5IV`2(_H%o+c?1yl+2R|zIOsiYW7qwS2 zY+7o?i9hV=B));({D0i3hv9&$O z(!}}nWk&G&E}1A(rx=%}Uu#@1E--lWqGm?DRr3Uo8`s^I##wjX3)yQmUsq_=RCZ22 z9s?Jx9);?kAFQ5C@^6lL>K|B^^@Omx*8CK*WR@Q)HW0 M{9@sM_45Bs05!Q#asU7T literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image013.ico b/QtQTreeWidgetEx/image/Image013.ico new file mode 100644 index 0000000000000000000000000000000000000000..0ee0568945377c30d5d973d89afcc31770cd8818 GIT binary patch literal 4286 zcmeHKdr(y86+io87ZyYwA_hySrjx{)Njo~7w3D=Go0O&*)2xbtP|_lTj{v^F6l<|4 z!TRE16coi*F_>DPiHV~$YSL&Lgk=|&m4~p)V}S)!47%0a{(A22URjA+|FAR3OzzI_ zp6@&7JHKBO?Lu5#%-ZBiRg$@WRi6TzUI$u#k!Uz4@+6%sBmDt|-5nU_e| z7fHeg@p7SVjknOZZ=`Vjy7MivgQDE}G#O0Oe_VLG8&NBA&`P!TV~z&n1pb#e?G?}cIT z&=`F2_fRJW4~F8#u}5(8_!tb9kHklFz0kAS7lZplFi;kZfgNhJq$t6h5IOG!{VQ~X z2S8Ikg_Bh8jEmPp%hXZkq`TBPS!M-yb_T3X;-}6Hkc0Gxn(s1;a2I2DF zQMg(b%I!v@XIn5j-}YnqC>qnhiyATZjC(_j`NC+@{_Pi}tBIyBD_$a)m&h4GCPW}OX$I{VzbSW->umrt_;?Pqz6}FObux$xM$Ce*qcgVDYBr!b^G2IH$T7-M9pWr$KL5339F zo}z&LQ50A4GT};|0`{%`=qwIL&%P)$WlzGtbj%TVcYHow2J@TWhi&JxXnQ-1;|HOu z1eh#6pNW=5zkM_;sXkHPDN*+Jc>vGiH2i4rS`h|XI zD+obbzCXG)`NFt>P!)G?KZ(=yJ2?s?X>55E&9|)}bZ^!&#|T*eqGf*>Ota;8pe{jy zx`aD*Vw($`gJqQxZF#=v*E(4YbQJn>d|$Nw zQHH8`In2olC+b-m6BT%WrW}W-%TdL7)F&}mFT%ia8Ws}THhMFMA9^>+QOV;k+9VE9 zO6?_m!(0Up&!ne5pG#T2>t$#!5aatexoYPsadE*A&L^mF^{-)Y90|wi`5IKsVQ#nG zJYR|0d18Du&x0?zH^^c5z0B>e7~iG(B@ZiPm?oVgEcIv~zs(B0?RX z9}Q`YRF`a8Gz!=D{1{iZhr;phSe$u7gX(!M+eL0;oX`2^aeN*>8;_-t$JWzd;<+uE zyOD7sPWk-V7%J&pCFZX|2j}0qoN$42Yh0poVX+G46cyX2!B+Yl?~xGP*v~nn@;>A| zO$${pEhhH$cJ`q&mr%>`Z~Kcp%yGB+C&>!kKW5Q>YdXhYuS7eqf!=%tKAx>WQ-&9s zmJPw2riLY7$2mm8UOd{F!`U=%RLoYQD_8DZdu4oOyUby6jc`@fuID_~6l-uJ_o#~Iht=`Vut!w3I zPT_Mj-Q_3xO1Q*a5|5R zkfGrmqMbSP?D!t8+f8UcsDqW)pCy~mj5+eJ_;~tzmaE_N$uh0b);FzCqdt+)!t0S&hcxBwX#Ng~Q>%HJb@7ISO9WuD-Ws zYw#eb%NkM8v`TBS-a4r_U zZwHP%j$Vr%1NIhJi=IR?uOS1U3nJHp;$lv~-b=aKZtEIvo_}xD@V;-(41#qXpTirK z=q>T%?|@)9j)vmqiAQjY;dr0F1>Oxo-wuCRwuHgDX*^n2kAZ%+3YJ`rlSksSxOt`e zaB0d3JYiYq+h<+Jd&dnU_pu>!0=oCS0Nb`FU@IDh?jl~7TYb>G%?CZjK78i}z*amC zUAw37-SZ-97Wl!sc8Ejb6QxuZ`K7v~YuONd%(^LTxixQeZe@xV5SUH(7$yHwU9E_`fj_S-voQd_h?I-zHrnpw?2gij z-{EgC0{=xY#Za*^hECprSzMPO*`&Ise3j1C#?pU`vAp+V`TP@Qj9B)BThF@M7+NdF zeV9*ulDwM1catZ?yUJY`?;tLlljN7h{yxmuB3Da>s;D`G&#eD}mJH?ThaFqwtIZ;> z_H5PDEm^7`+z-vm$p8Nl|69&)<_KWevy%75gMfQ0?xEpe)zGt&?Wg%a9&lRi!mwam F{Vzx7jH3Vm literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image014.jpg b/QtQTreeWidgetEx/image/Image014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a39dc8949a709522c8ffb91c1a684a2839db261b GIT binary patch literal 792 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAjfsuiUnE?r~0r{+)Kq-9z1|}v379e0}gvc{8 z0bS1~D8#@ntSD;e7$_p9x=36}*~lrea4JxP7|7R1CNVHDF)#zgr34w685xi*VPq0y z5K?sfe~WHV&{5S_fOqY!p+F<;_5jUJzBs2{iAf$P{yrKRqbeRg2%$z z_pwj2`92vKDuywdaG56W;9HQy;Jj|to^5`As*i`yaZ}ON^FC+wYd+^2yMKaD_Plnt zxw12D)~&Uw+H7-Ig|D`)7G1{CzsaS5Z>dUeqtwdqAWjxJv(2}g*t)zYyT_&!%4ll0 z-Z}Duz23-^fxpOt`?ON}xj#2=)q6jy;8ec;;zoKN&!RKyi(Y+R`AFHe5CN;l{b^Y&x`+1=if1k#W%R&iH%wLeJtgGeF`b+nM;5=HT{t6UyUHfu=lwpv?yAGm z%4n&p=VGp}bQ&yWFe6!~FkE0IpLB A!T``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAXfq{XI8Au=iBNH1t2Qv#NP*zKTfr*icg^h`k z6)Mlj#LObdz{)PfCah@a7^q|p6zFAyAs`krD^OTbkb#*2=y-%3KqCYh zSXdPeAAWF5Ec}0qfrpt9=pdk=J;SSg!d$1vXD|r7~uo+z;)c>4~P)eJRL?KVzRdRM;vXnodyh8;_H zmP>wowktcHkxzftc z@Oa^GxgYluCQO@pK0f`x*S5I)X^yL|e3i_N(bnfOycxLr=Mwo<@?0FR9GM zX6Cdd8)mvp6bPSo=s~~v_ZAhcz=Tc~lZy=t19HV=8<;m7Ip8&?@7JnR5((d~Brp7B zX*bdRNMwrS@#i1jhGwi-(D;zsM0?vAImhoRH)|vHbYdDcC3PNY9N6*xr5j6Y>*9`x m-yasUt=jTJ)KO*roB8S7*|v8swX3{XEOPsdS2CCB|C<2cX6sr2 literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/image/Image016.jpg b/QtQTreeWidgetEx/image/Image016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..995f1509c714b06a8bddb41d8fab56b1f9aea8d5 GIT binary patch literal 607 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivP+(?MVqg+vWEN!ne}qAbfdS|;1|-13&dSEX%n6h;5MW?rW@ch$WoL!T zGcqx=Ft7@;DGCW28aXBwHnNK-1qCNBEGpi(=^{{v7|`F0NMz<23V`E~ZIR&}upp8O(mWqxjdNshVZzU0hs0e?a1cgEZ2GL%eRnJ)Lb<=><4 zf3BpkOnUTu`>*<0+g}LpdD6fA<*k*anbzShN4`GO&p#`jzvajl){eDBKW9Ap(Rt3Q O)J|>d3D3sh|2F}iytSDC literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/main.cpp b/QtQTreeWidgetEx/main.cpp new file mode 100644 index 0000000..9ce5a7e --- /dev/null +++ b/QtQTreeWidgetEx/main.cpp @@ -0,0 +1,11 @@ +#include "ExQTreeWidget.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + ExQTreeWidget w; + w.show(); + + return a.exec(); +} diff --git a/QtQTreeWidgetEx/qt.ico b/QtQTreeWidgetEx/qt.ico new file mode 100644 index 0000000000000000000000000000000000000000..0ee0568945377c30d5d973d89afcc31770cd8818 GIT binary patch literal 4286 zcmeHKdr(y86+io87ZyYwA_hySrjx{)Njo~7w3D=Go0O&*)2xbtP|_lTj{v^F6l<|4 z!TRE16coi*F_>DPiHV~$YSL&Lgk=|&m4~p)V}S)!47%0a{(A22URjA+|FAR3OzzI_ zp6@&7JHKBO?Lu5#%-ZBiRg$@WRi6TzUI$u#k!Uz4@+6%sBmDt|-5nU_e| z7fHeg@p7SVjknOZZ=`Vjy7MivgQDE}G#O0Oe_VLG8&NBA&`P!TV~z&n1pb#e?G?}cIT z&=`F2_fRJW4~F8#u}5(8_!tb9kHklFz0kAS7lZplFi;kZfgNhJq$t6h5IOG!{VQ~X z2S8Ikg_Bh8jEmPp%hXZkq`TBPS!M-yb_T3X;-}6Hkc0Gxn(s1;a2I2DF zQMg(b%I!v@XIn5j-}YnqC>qnhiyATZjC(_j`NC+@{_Pi}tBIyBD_$a)m&h4GCPW}OX$I{VzbSW->umrt_;?Pqz6}FObux$xM$Ce*qcgVDYBr!b^G2IH$T7-M9pWr$KL5339F zo}z&LQ50A4GT};|0`{%`=qwIL&%P)$WlzGtbj%TVcYHow2J@TWhi&JxXnQ-1;|HOu z1eh#6pNW=5zkM_;sXkHPDN*+Jc>vGiH2i4rS`h|XI zD+obbzCXG)`NFt>P!)G?KZ(=yJ2?s?X>55E&9|)}bZ^!&#|T*eqGf*>Ota;8pe{jy zx`aD*Vw($`gJqQxZF#=v*E(4YbQJn>d|$Nw zQHH8`In2olC+b-m6BT%WrW}W-%TdL7)F&}mFT%ia8Ws}THhMFMA9^>+QOV;k+9VE9 zO6?_m!(0Up&!ne5pG#T2>t$#!5aatexoYPsadE*A&L^mF^{-)Y90|wi`5IKsVQ#nG zJYR|0d18Du&x0?zH^^c5z0B>e7~iG(B@ZiPm?oVgEcIv~zs(B0?RX z9}Q`YRF`a8Gz!=D{1{iZhr;phSe$u7gX(!M+eL0;oX`2^aeN*>8;_-t$JWzd;<+uE zyOD7sPWk-V7%J&pCFZX|2j}0qoN$42Yh0poVX+G46cyX2!B+Yl?~xGP*v~nn@;>A| zO$${pEhhH$cJ`q&mr%>`Z~Kcp%yGB+C&>!kKW5Q>YdXhYuS7eqf!=%tKAx>WQ-&9s zmJPw2riLY7$2mm8UOd{F!`U=%RLoYQD_8DZdu4oOyUby6jc`@fuID_~6l-uJ_o#~Iht=`Vut!w3I zPT_Mj-Q_3xO1Q*a5|5R zkfGrmqMbSP?D!t8+f8UcsDqW)pCy~mj5+eJ_;~tzmaE_N$uh0b);FzCqdt+)!t0S&hcxBwX#Ng~Q>%HJb@7ISO9WuD-Ws zYw#eb%NkM8v`TBS-a4r_U zZwHP%j$Vr%1NIhJi=IR?uOS1U3nJHp;$lv~-b=aKZtEIvo_}xD@V;-(41#qXpTirK z=q>T%?|@)9j)vmqiAQjY;dr0F1>Oxo-wuCRwuHgDX*^n2kAZ%+3YJ`rlSksSxOt`e zaB0d3JYiYq+h<+Jd&dnU_pu>!0=oCS0Nb`FU@IDh?jl~7TYb>G%?CZjK78i}z*amC zUAw37-SZ-97Wl!sc8Ejb6QxuZ`K7v~YuONd%(^LTxixQeZe@xV5SUH(7$yHwU9E_`fj_S-voQd_h?I-zHrnpw?2gij z-{EgC0{=xY#Za*^hECprSzMPO*`&Ise3j1C#?pU`vAp+V`TP@Qj9B)BThF@M7+NdF zeV9*ulDwM1catZ?yUJY`?;tLlljN7h{yxmuB3Da>s;D`G&#eD}mJH?ThaFqwtIZ;> z_H5PDEm^7`+z-vm$p8Nl|69&)<_KWevy%75gMfQ0?xEpe)zGt&?Wg%a9&lRi!mwam F{Vzx7jH3Vm literal 0 HcmV?d00001 diff --git a/QtQTreeWidgetEx/resources.qrc b/QtQTreeWidgetEx/resources.qrc new file mode 100644 index 0000000..8691263 --- /dev/null +++ b/QtQTreeWidgetEx/resources.qrc @@ -0,0 +1,20 @@ + + + image/Image001.jpg + image/Image002.jpg + image/Image003.jpg + image/Image004.jpg + image/Image005.jpg + image/Image006.jpg + image/Image007.jpg + image/Image008.jpg + image/Image009.jpg + image/Image010.jpg + image/Image011.jpg + image/Image012.jpg + image/Image013.ico + image/Image014.jpg + image/Image015.jpg + image/Image016.jpg + + diff --git a/QtQlistWidgetEx/QtQlistWidgetEx.pro b/QtQlistWidgetEx/QtQlistWidgetEx.pro index a72dbd6..72fe7ea 100644 --- a/QtQlistWidgetEx/QtQlistWidgetEx.pro +++ b/QtQlistWidgetEx/QtQlistWidgetEx.pro @@ -34,7 +34,7 @@ HEADERS += \ FORMS += \ ExQListWidget.ui -RC_ICONS += qt.ico +#RC_ICONS += qt.ico # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/README.md b/README.md index c1933a0..bb82cca 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ - 自定义`QStyle`界面所有控件的风格,换肤效果的教程,自定义继承`QCommonStyle`的风格类【QtCustomStyleEx】 - 预备知识:`QStyle`、`QCommonStyle`d等讲解 - [更换`Qt`应用程序的界面`UI`,实现换肤,改用自带其他默认`QStyle`风格样式](https://mp.csdn.net/mdeditor/100148539#) +- [`QStyle`自定义重绘`QSlider`控件](https://blog.csdn.net/qq_33154343/article/details/100545769) +- [QStyle自定义重绘QRubberBand控件](https://blog.csdn.net/qq_33154343/article/details/100588428)