精华内容
下载资源
问答
  • 设置QTreeView不可编辑 QTreeView* treeView = newQTreeView(); treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);//不可编辑 QTreeWidgetItem可修改 QTreeWidgetItem* item = new QTreeWidget...

    设置QTreeView不可编辑

    QTreeView* treeView = newQTreeView();
    treeView->setEditTriggers(QAbstractItemView::NoEditTriggers);//不可编辑
    

    QTreeWidgetItem可修改

    QTreeWidgetItem* item = new QTreeWidgetItem(tree);
    // 可编辑修改
    item->setFlags(item->flags() ¦ Qt::ItemIsEditable);
    tree->editItem(item, 0);
    
    //不可编辑修改
    item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    

    参考:
    https://blog.csdn.net/ymc0329/article/details/7284524

    QTreeView中添加图标

    QStandardItem* txtItem = new QStandardItem(QIcon(":/res/img/txt.png"),QStringLiteral("文本"));
    
    

    效果图:

    在这里插入图片描述
    转载自:https://blog.csdn.net/naibozhuan3744/article/details/80989175

    展开全文
  • QTreeView和QTreeWidget样式表的使用案例

    万次阅读 2016-09-07 16:22:00
    主要是修改QTreeWidget(或者是QTreeView)的界面问题。官方的帮助文档其实起到很大的作用,网上的资料比较杂,而且普遍描述得不清楚。今天花了一些时间解决了项目中遇到的一些小问题,虽然都不是很严重的问题,但是...

    由于项目需要,第一次接触到QT样式表。主要是修改QTreeWidget(或者是QTreeView)的界面问题。官方的帮助文档其实起到很大的作用,网上的资料比较杂,而且普遍描述得不清楚。今天花了一些时间解决了项目中遇到的一些小问题,虽然都不是很严重的问题,但是对于刚刚接触Qt的新人而言,应该也算是有一点麻烦。

    博主的项目环境:Ubuntu 14.04  64bit       Qt 4.8.6

    从项目中剥离初一个简单的例子,总结一下今天解决的麻烦:

    1. qss文件的读取格式
    2. QTreeWidget项目的背景设置

    最初,执行写好的qss文件总是达不到显示的效果,检索之后,有网友说是qss文件格式的问题,使用utf-8或者ASCII等,我使用的是ASCII。使用enca命令查看其文件格式即可,其实应该不是这个问题,如怀疑可能在读取文件的时候出错,使用下面的方式在读取文件的时候进行检测即可。

    QFile file(":/styleSheet/styleSheet.qss");
        if(file.open(QFile::ReadOnly))
        {
            qApp->setStyleSheet(file.readAll());
            file.close();
            qDebug() << "Open File Successfully!!!";
        }
        else
            QMessageBox::about(NULL, "Test", "Open File Failed");

    接下来就是样式表的设置,仅对几个比较隐蔽的问题进行说明。qss在很多地方借鉴了css,但是实现起来更简单。qss的注释支持" /* */",不支持“//",如果使用了"//"进行注释,可能导致该符号后面的样式表设置内容全部失效。

    QTreeWidget{
        background-color: #5B677A;
    
        /* set the font properties*/
        font-size:17px;
        color: white;
    }

    上面的font-size设置的字体大小,color为字体颜色。

    设置QTreeWidget样式表的时候,有的时候会发现会自动缩进,也就是鼠标hover到某个item的时候,item会自动”往前走一点“,解决这个问题的方式是,设置item的背景

    QTreeWidget::item{
        margin:13px;
        background: #5B677A;
        background-clip: margin;
    }

    上面margin设置的效果是可以增大各个item的内容(content)之间的间隔,因为QTreeWidget是建立在Box Model之上的,这方面的内容,帮助文档有介绍,使用background-clip的原因也是如此,其值还可设置为border、padding、content,一般这三者的边界是重合的。这么设置纯粹是为了达到在我的项目中视觉效果的要求,具体的选则因人而异。


    接下来要解决的问题就是图照片那个所示的橘红色的部分,因为这部分的显示与整体的颜色搭配不协调。顺便说一句,图中的"+"   "-" 还有那个笔记的图标,都是位于branch的位置,这是我在后面的内容中添加的,但是没有设计到去除橘红色部分的内容。其实只要理解了什么是branch,这个问题也很简单,只需修改branch的背景色即可

    QTreeWidget::branch{
        background:#5B677A;
        }
    

    其实,我们不设置QTreeWidget::branch的背景色以及QTreeWidget::item的背景色的话(当然,在后面也没有设置QTreeWidget::item:hover或者QTreeWidget:selected的前提下)每次选中的时候,整个一栏都是橘红色的,如下


    设置QTreeWidget::item以及QTreeWidget::branch的目的只是为了进行背景覆盖。至此,这个小问题全部解决。

    下面是示例代码,代码中的文件路径使用的是在Qt中新建的资源文件,这个比较简单,就不赘述了。

    main.cpp

    #include <QtGui/QApplication>
    #include <QTreeWidget>
    #include <QFile>
    #include <QMainWindow>
    #include <QDebug>
    #include <QMessageBox>
    
    int main(int argc, char * argv[])
    {
        QApplication app(argc, argv);
    
        QFile file(":/styleSheet/styleSheet.qss");
        if(file.open(QFile::ReadOnly))
        {
            qApp->setStyleSheet(file.readAll());
            file.close();
            qDebug() << "Open File Successfully!!!";
        }
        else
            QMessageBox::about(NULL, "Test", "Open File Failed");
    
    
        QTreeWidget *treeWidget = new QTreeWidget;
         treeWidget->setColumnCount(1);
         QList<QTreeWidgetItem *> items;
         for (int i = 0; i < 2; ++i)
         {
             items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
             for(int j=0; j <3; j++)
                 items.at(i)->addChild(new QTreeWidgetItem(items.at(i), QStringList(QString("child: %1").arg(i))));
         }
         treeWidget->insertTopLevelItems(0, items);
         treeWidget->setHeaderHidden(true);
         treeWidget->resize(270, 390);
         treeWidget->show();
    
        return app.exec();
    }
    
    样式表styleSheet.qss

    QTreeWidget{
        background-color: #5B677A;
    
        /* set the font properties*/
        font-size:17px;
        color: white;
    }
    
    QTreeWidget::item{
        margin:13px;
        background: #5B677A;
        background-clip: margin;
    }
    
    
    QTreeWidget::branch{
        background:#5B677A;
        }
    
    
    QTreeView::item:hover {
        background: rgb(69, 187, 217);;
    }
    
    QTreeView::item:selected:active{
        background: rgb(63, 147, 168);
    }
    
    QTreeView::item:selected:!active {
        background: rgb(63, 147, 168);
    }
    
    
    QTreeWidget::branch:closed:has-children:!has-siblings,
    QTreeWidget::branch:closed:has-children:has-siblings {
        border-image: none;
        image: url(:/image/plus.png);
    }
    
    
    QTreeWidget::branch:open:has-children:!has-siblings,
    QTreeWidget::branch:open:has-children:has-siblings  {
        border-image: none;
        image: url(:/image/minus.png);
    }
    
    QTreeWidget::branch:!has-children:has-siblings:adjoins-item{
        border-image:none;
        image:url(:/image/test.png);
        }
    
    QTreeWidget::branch:!has-children:!has-siblings:adjoins-item{
        border-image:none;
        image:url(:/image/test.png);
        }
    样式表中image和border-image的区别:image填充的是content,而后者填充的是border,这还是Box Model中的内容

    展开全文
  • QTreeView/QTreeWidget设置行间距

    千次阅读 2020-10-19 17:57:10
    *QTreeView/QTreeWidget设置行间距 由于项目要求,需要设置Tree行的间距,在网上搜索发现大多数都是用的样式表 QTreeView::item{ padding:10px; } 或者 QTreeView::item{ margin:10px; } 但是在使用中发现这个...

    QTreeView/QTreeWidget设置行间距

    由于项目要求,需要设置Tree行的间距,在网上搜索发现大多数都是用的样式表

    QTreeView::item{
    	padding:10px;
    }
    

    或者

    QTreeView::item{
    	margin:10px;
    }
    

    但是在使用中发现这个样式只能修改行高,无法修改间距。

    所以查看Qt帮助文档,发现有QTreeView有drawRow接口,尝试重写该函数,发现能够实现间距调整

    void SettingTree::drawRow(QPainter *painter, const QStyleOptionViewItem &options, const QModelIndex &index) const
    {
        QStyleOptionViewItem opt(options);
        opt.rect.adjust(0, 5, 0, -5);
        QTreeWidget::drawRow(painter, opt, index);
    }
    

    效果如下
    在这里插入图片描述

    展开全文
  • 遇到窗口中存在qtreeviewqtreewidget时,特别是如下示意图所在位置时,会出现问题吧。如上图所示,在重写窗口的移动、拉伸时,会将窗口划分为以下9个部分(根据自己的需求,还可以继续划分);分别来显示拉伸窗口...

    一、概述

    1. 将窗口设置为无边框窗口:this->setWindowFlags(Qt::FramelessWindowHint);
    2. 重写窗口移动、拉伸、最大最小化、关闭等函数。(之前文章已写)
    3. 遇到窗口中存在qtreeview、qtreewidget时,特别是如下示意图所在位置时,会出现问题吧。如上图所示,在重写窗口的移动、拉伸时,会将窗口划分为以下9个部分(根据自己的需求,还可以继续划分);分别来显示拉伸窗口时鼠标光标的不同样式(具体操作看我上篇文章)。

    二、具体叙述

    在这里插入图片描述

    这里简单概述以下,方便下面问题的展开: 将窗口和窗口中的各个部件分别设置setMouseTracking(true) ;启动鼠标跟踪事件,也就是以下三个函数(不止三个,这里用到了三个)

    void mousePressEvent(QMouseEvent* event);//鼠标按下事件
    void mouseReleaseEvent(QMouseEvent* event);//鼠标释放事件
    void mouseMoveEvent(QMouseEvent* event);//鼠标移动事件
    

    通过void mouseReleaseEvent(QMouseEvent* event);可以获取鼠标光标在窗口中的位置,也就可以确认光标所在区域,确认光标类型。

    重点: 当如上图所示的,qtreeview或 qtreeWidget 在窗口边缘时,会导致与qtreeview或qtreewidget相邻区域的光标在进入第 5 区域后光标类型不会变为第 5 区域的光标类型,举个例子来说:鼠标光标由 8 区域进入 5 区域,理论上在 8区域光标类型为:

    5区域光标类型为:
    、
    但是实际上,5区域光标依然会显示在8区域时的光标类型。

    原因叙述: qtreeview 和 qtreewidget即使设置了setMouseTracking(true);以上三个鼠标事件依然不能启动,这就导致在这两个窗口中不能获取鼠标光标在窗口中的位置,也就导致了在 8 -> 5 时,光标所在区域不能更新,鼠标光标类型就没有更新。

    三、解决办法

    我在网上查找到的方法,基本上都是需要继承qtreeview或qtreewidget后,重写鼠标跟踪事件函数,但这样太复杂,可以用我这个方法。

    以去treeview为例:

    步骤一: ui->treeView->installEventFilter(this); 添加事件过滤器
    步骤二: bool eventFilter(QObject* obj,QEvent* event); 重写事件过滤函数
    步骤三: 代码实现

    bool XXX::eventFilter(QObject* obj,QEvent* event)
    {
        if(obj == ui->treeView){	
            if(event->type() == QEvent::HoverMove){
                setCursor(Qt::ArrowCursor);
                return true;
            }
        }
        return QWidget::eventFilter(obj,event); // class XXX:: public QWidget 根据窗口类型确认返回值类型
    }
    

    函数解释:

    if(光标在treeview 中 移动){
    	setCursor(Qt::ArrowCursor); 设置光标类型为Qt::ArrowCursor
        return true;	//返回true,事件不再下发,到此结束
    }
    //没有触发上面if判断,不属于我需要处理的事件,return 将事件返回下发给其他函数,从而不影响其他事件的正常运行
    return QWidget::eventFilter(obj,event); 
    
    展开全文
  • QTreeView没有直接提供设置行高的方法,一般的方法是使用Delegate。 从QItemDelegate继承,使用QTreeView::setItemDelegate设置。派生类里对sizeHint处理: QSize MyDelegate::sizeHint ( ...
  • QTreeWidget/QTreeView的使用

    千次阅读 2018-05-14 16:16:02
    头文件: #include &amp;lt;QStandardItem&...QTreeView&amp;gt; 源码: QStandardItemModel *model = new QStandardItemModel(treeView); //树节点改变时触发此信号 connect(mod...
  • 一、QTableView、QTreeView异同 都需要设置mode,即setMode(QStandItemMode*)来设置表格树节点。其中QStandItemMode是标准项QStandItem的模型或者集合,通过不同函数添加进来。 QTableView控件中,...
  • QTreeWidgetItem*> items; //先获取顶层节点 int childcount = ui->treeWidget->topLevelItemCount(); for(int i = 0; i < childcount; i++) { items << ui->treeWidget-&
  • QTreeView/QTreeWidget设置行间距 由于项目要求,需要设置Tree行的间距,在网上搜索发现大多数都是用的样式表 QTreeView::item{ padding:10px; } 或者 QTreeView::item{ margin:10px; } 但是在使用中发现这个...
  • 默认QTreeView的滚动条设置是Qt::ScrollBarAsNeeded.也就是默认值。不修改的话是根据需要显示滚动条的。 我在QTreeView里面添加了item item里面有文本或者点击扩展按钮扩展tree的时候,结果水平方向没有滚动条,...
  • [Qt]QTreeWidget和QTreeView用法

    万次阅读 2008-03-20 03:05:00
    QTreeView一般相应的QXXModel合用,形成Model/View结构.QTreeWidget继承自QTreeView ,是封闭了默认Model的QTreeView,其中的元素是QTreeWidgetItem类型,要插入只需将新建QTreeWidgetItem的父类设为指定的...
  • 13-QTreeWidget/QTreeView

    2021-01-31 22:27:08
    QTreeView { background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa); alternate-background-color:yellow; show-decoration-selected:1; /*整行高亮显示*/ } ...
  • 零、未改变图标大小 一、设置所有图标大小 ui->treeWidget->setIconSize(QSize(64, 64)); 结果如下图所示。 二、自定义某一行的图标大小 使用委托的方法,由我们自己来绘画每一个item。...QStyled..
  • 现在我们从最简单的QListWidget、QTreeWidget和QTableWidget三个类开始了解最简单的 model/view 的使用。这部分内容的确很难组织。首先,从最标准的 model/view 开始,往往会纠结于复杂的代码;但是,如果从简单的 ...
  • QTreeWidget 简介

    千次阅读 2019-04-13 10:40:02
    版权声明:如有使用转载,请附加出处 ...QTreeWidget QTreeWidget类中的常用方法 方法 描述 setColumnWidth(int column,int width) 将指定列的宽度设置为给定的值 Column:...
  • 用于QTreeView、QTableView、QTreeWidget、QTableWidget的定制QHeaderView,实现类似Windows资源管理器中标题栏的效果:鼠标移到标题栏显示箭头按钮,点击后显示下拉菜单,菜单支持多选checkbox。可方便的显示/隐藏...
  • QTreeView处理大量数据

    千次阅读 2016-06-03 11:11:39
    如何使QTreeView快速显示1000万条数据,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习。 我开始使用的...
  • Qt中QTreeWidgetQTreeView)样式设置

    千次阅读 2020-09-10 09:59:41
    QTreeView { ... /*消除QTreeWidgetItem外层虚线框*/ border: 0px solid #000000; } QTreeView::item { border: 1px solid #000000; border-top-color: transparent; border-left-color: transpa.
  • PyQt5 QTreeView树图

    2020-12-23 11:28:59
    QTreeWidget 是继承了QTreeView 常用方法: 树形结构是通过QTreeWidget和QTreeWidgetItem类实现的: 代码: # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import * from PyQt5.QtGui ...
  • 自定义这些类的列宽是通过设置header来实现的,几年前胡乱捣鼓实现过,最近又忘了,昨天搜索了一阵子,没找到方法,今天早上一搜到下面的帖子,为了再次出现浪费时间的情况,故本次特地记录一下,加深印象的同时,也...
  • 用户双击子节点后,弹出编辑框,编辑框样式有QlineEdit,QSpinBox,QComboBox,QDateTimeEdit
  • 1、特别说明 (1)树形结构的的伸缩线条有严格要求,测试时...QTreeView{ background:transparent; outline:0px; border:none; color:rgb(255,255,255); margin-left:45px; margin-top:20px; font-size:14px

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 986
精华内容 394
关键字:

qtreeview和qtreewidget区别