首页 > 其他分享 >QTreeView置顶排序功能实现

QTreeView置顶排序功能实现

时间:2024-09-14 17:49:31浏览次数:9  
标签:排序功能 QTreeView caseinfo toString path 排序 strTime 置顶

1.需求描述

QTreeView先插入的排在上面,并支持手动置顶进行排序,取消置顶;

2.实现方案

(1)定义排序角色

给每一个插入的QStandardItem对象设置一个排序角色,我们用插入时间来设置这个值;

enum  CustomRole

{

    QOrderRole = Qt::UserRole + 1

};

构造函数中设置model的排序角色

m_modelTree->setSortRole(QOrderRole);

 

(2)处理排序逻辑

点击置顶按钮的时候,将时间加上100年,取消置顶按钮的时候,将时间减去100年,并将QstandardItemModel以这个时间逆序排序,这样置顶的item就会排在最上面;后置顶的排在最前面;置顶和取消置顶都会将时间更新到数据库,这样重新打开软件,依然保持着顺序;

if (bt== "Top")
        {
            QString strTop =caseinfo.value("top").toString();
            if (strTop=="1")//取消置顶
            {
                caseinfo.insert("top", "0");
                QString strTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
                caseinfo.insert("createtime", strTime);
                pItem->setData(strTime, QOrderRole);
                QString strSql = QString("update CaseManage set createtime = '%1' ,top='0' where path='%2'").arg(strTime).arg(caseinfo.value("path").toString());
                QString strmsg = "";
                QVariantMap result;
                LocalDb::instance()->ExcuateSql(strSql, result, strmsg);
                if (m_picPathDirInfo.find(caseinfo.value("path").toString()) != m_picPathDirInfo.end())
                {
                    m_picPathDirInfo[caseinfo.value("path").toString()]["createtime"] = strTime;
                    m_picPathDirInfo[caseinfo.value("path").toString()]["top"] = "0";
                }
                pItem->setData(caseinfo, Qt::UserRole);
            }
            else//置顶
            {
                caseinfo.insert("top", "1");
                //增加100年作为置顶时间排序最上面
                QString strTime = QDateTime::currentDateTime().addYears(100).toString("yyyy-MM-dd hh:mm:ss.zzz");
                caseinfo.insert("createtime", strTime);
                pItem->setData(strTime, QOrderRole);
                QString strSql = QString("update CaseManage set createtime= '%1' , top='1' where path='%2'").arg(strTime).arg(caseinfo.value("path").toString());
                QString strmsg = "";
                QVariantMap result;
                LocalDb::instance()->ExcuateSql(strSql, result, strmsg);
                if (m_picPathDirInfo.find(caseinfo.value("path").toString()) != m_picPathDirInfo.end())
                {
                    m_picPathDirInfo[caseinfo.value("path").toString()]["createtime"] = strTime;
                    m_picPathDirInfo[caseinfo.value("path").toString()]["top"] = "1";
                }
                pItem->setData(caseinfo, Qt::UserRole);
            }
            SlotUpdateTreeListBackground();
            m_modelTree->sort(0, Qt::DescendingOrder);
            
        }

(3)触发排序

    m_modelTree->sort(0, Qt::DescendingOrder);

插入数据之后不会自动排序,需要调用sort函数之后,才会排序,所以置顶和取消置顶,已经初始化,插入新的数据时,都要调用下sort函数,去排序;除了按照时间排序,也可以按照名称排序,或者任意角色数据进行排序;

 

标签:排序功能,QTreeView,caseinfo,toString,path,排序,strTime,置顶
From: https://www.cnblogs.com/bclshuai/p/18414438

相关文章

  • QStandardItem先设置图标再插入QTreeView会影响插入性能
    所有的界面显示都交代理去绘制,否则会影响插入性能;一开始打算将类型图标通过QStandardItem创建时传给QStandardItem,在插入到model中,后来发现这样会降低插入的性能;pItem=newQStandardItem(QIcon(":/foldericon.svg"),info.value("name").toString());改成用代理QStyledItemDel......
  • QTreeView实现搜索功能并且关键字标红
    1、需求描述实现组织树搜索,关键字红色显示;搜索规则,名称匹配显示,没有匹配不显示,子节点匹配,父节点即使没有匹配也显示;2.实现方法(1)top节点名称匹配关键则显示,否则隐藏voidTreeTaskList::SlotFilterChanged(QStringstrText){m_TreeDelegate->setProperty("FilterString"......
  • QTreeView代理QStyledItemDelegate实现按钮的鼠标hover移动和点击响应
    1.需求描述QStyledItemDelegate实现按钮的点击和响应功能,鼠标移动到按钮上,也会显示tooltip提示信息2.实现方法(1)重写editorEvent函数,根据type类型触发不同的响应函数为了实现按钮的响应,需要重写QStyledItemDelegate类的editorEvent函数,并根据插入时设置进去的type类型,判断是......
  • QTreeView代理QStyledItemDelegate实现按钮、图标的绘制
    1.需求描述代理实现按钮图标状态的绘制实现方法(1)重写paint函数,根据type类型绘制案件、文件夹、监控点、视频任务; 为了实现不同的item的样式,需要继承QStyledItemDelegate类型实现TreeTaskDelegate。重写paint函数,根据不同的类型type去绘制不同的按钮和状态;voidTreeTaskD......
  • pbootcms列表如何置顶文章,istop不生效怎么办?
    在PbootCMS中,如果你想让某些文章置顶显示,通常会使用 istop 字段来标记哪些文章应该被置顶。如果发现 istop 字段不生效,可以尝试以下几种方法来解决问题:方法一:检查模板标签确认你在模板文件中是否正确使用了置顶文章的标签。正确的标签应该是类似于下面这样的:phtml ......
  • pbootcms模板如何实现产品置顶
    要在PBootCMS中实现产品的置顶功能,你可以按照以下步骤操作:定位到模板文件:打开你的网站后台。导航到模板管理部分,找到templatesdefault目录下的index.html文件。修改产品列表查询参数:在index.html文件中找到展示产品列表的部分。修改产品列表的查询参数,将order=sorti......
  • pbootcms列表用istop置顶文章不管用的解决办法
    我们在运用pbootcms来构建网站的时候,于列表页使用了istop=1这一设置,并且在后台也进行了置顶操作,然而却毫无效果。 针对这个问题,通常是由于我们自身调用的缘故所致。倘若我们仅仅只想调用那些已经被置顶的文章,而不调用其他文章。此时,我们能够采用如下标签: {pboot:listis......
  • PyQt5实现置顶、位置固定、透明度设置
    在PyQt5中,要实现一个始终置顶、位置固定、透明度设置、去除关闭按钮且无法通过常规方式关闭的对话框窗口,需要对QDialog进行一系列的自定义设置。以下是一个详细的示例代码,展示了如何实现这些功能:importsysfromPyQt5.QtWidgetsimportQApplication,QDialog,QVBoxLayou......
  • 置顶博客列表
    为精简首页置顶博客的数量,将需要置顶博客列出如下:1、[原创控件]为lazarusTDataSet增加类似TClientDataSet的Delta功能,可直接生成增删改的SQL(2024-08-17增加blob类型转base64)1、为lazarusTDataSet增加类似TClientDataSet的Delta功能,可直接生成增删改的SQL2、[原创控件]QFCompon......
  • QSortFilterProxyModel和QTreeView排序功能
    1、需求,创建一个树有多层结构,同一层按照插入顺序逆序排列; ui.treeView->setHeaderHidden(true);//treewidget头标题是否显示,此处隐藏标题//ui.treeWidget->header()->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);ui.treeView->header()->s......