精华内容
下载资源
问答
  • treeWidget修改列宽

    2021-06-22 10:02:28
    treeWidget修改列宽 如何支持动态修改? treewidget.header().setResizeMode(QtGui.QHeaderView.ResizeToContents) treewidget.header().setStretchLastSection(False) 如何显示列的线条? 显示列的线条...

    treeWidget修改列宽

     

    如何支持动态修改?

     

    treewidget.header().setResizeMode(QtGui.QHeaderView.ResizeToContents)
    treewidget.header().setStretchLastSection(False)

     如何显示列的线条?

     

    显示列的线条

     

    表格线

     

    字的颜色修改为黑色,选中时仍然保持黑色

     

    选中之后,

     

    self.treeWidget.setStyleSheet(
        "QTreeView::item::selected{background-color:green;} QTreeView::item::hover{background-color:green;} QTreeWidget::item{border: 1px solid #d9d9d9;border-top-color: transparent;border-bottom-color: transparent;}")

     

     

     

     

     
    展开全文
  • TreeWidget小Demo

    2012-12-31 09:12:13
    一个treewidget的例子小Demo
  • PyQt 重载TreeWidget

    2021-10-18 19:27:37
    PyQt 重载TreeWidget 预览图: 目的是将输入文件批量转换成Json文件,为了可视化处理,制作了一个界面来管理这些操作,主要难点是列表、列表子项、菜单之间的应用,每一个都需要重载 下面是具体的代码,plainText...

    PyQt 重载TreeWidget
    预览图:
    在这里插入图片描述
    目的是将输入文件批量转换成Json文件,为了可视化处理,制作了一个界面来管理这些操作,主要难点是列表、列表子项、菜单之间的应用,每一个都需要重载
    下面是具体的代码,plainTextEdit就是转换后的Json文本

    class TreeWidget(QTreeWidget):
        def __init__(self, parent=None):
            super(TreeWidget, self).__init__(parent)
            # self.setExpandsOnDoubleClick(False)  # 禁用双击展开节点
            self.path = ''
            self.line_number_flag = True # 显示行号
            self.menu = QMenu() # 新建菜单
            self.setMenu() # 初始化菜单
    	
        def set_plainTextEdit(self, plainTextEdit):
            """
            设置文本
            """
            self.plainTextEdit = plainTextEdit
    	
        def refreshPlainText(self):
            """
            刷新文本
            """
        	# 获取当前选中的Item
            if self.currentItem() == None:
                return
            path = self.currentItem().item_output_path
            if self.path != path:
                self.path = path
                if os.path.exists(path):
                    with open(path, 'r', encoding='utf8') as f:
                        if self.line_number_flag:
                            lines = f.readlines()
                            cnt = 1
                            display_string = ''
                            for line in lines:
                                display_string += '%-6s|%s' % (str(cnt), line)
                                cnt += 1
                            self.plainTextEdit.setPlainText(display_string)
                        else:
                            self.plainTextEdit.setPlainText(f.read())
    
        def mousePressEvent(self, event: QtGui.QMouseEvent):
            """
            鼠标点击事件重载
            """
            try:
                itemIndex = self.indexAt(event.pos())
                # if itemIndex.row() != self.currentIndex().row():
                self.setCurrentIndex(itemIndex)
                if (itemIndex.row() == -1):
                    self.plainTextEdit.setPlainText('')
                    self.path = ''
                else:
                    self.refreshPlainText()
                super().mousePressEvent(event)
            except Exception as ex:
                print(ex)
    
        def contextMenuEvent(self, event: QtGui.QContextMenuEvent):
            """
            右键菜单事件重载
            """
            try:
                currentItem = self.currentItem()
                # 根据Item的类名显示对应的菜单
                if type(currentItem) == TreeItem or type(currentItem) == InfoItem:
                    self.menu.popup(QCursor.pos())
                    self.menu.show()
                # super().contextMenuEvent(event)
            except Exception as ex:
                print(ex)
    
        def setMenu(self):
            """
            设置右键菜单
            """
            try:
                self.menu.addAction(u'显示输入文件').triggered.connect(self.open_input_directory)
                self.menu.addAction(u'显示输出文件').triggered.connect(self.open_output_directory)
                self.menu.addAction(u'移除').triggered.connect(self.clear_item)
                self.menu.addAction(u'删除Json').triggered.connect(self.delete_self)
            except Exception as ex:
                print(ex)
    
        def open_input_directory(self):
            """
            在资源管理器显示源文件
            """
            currentItem = self.currentItem()
            # InfoItem为子项,不具有该变量
            if type(currentItem) == InfoItem:
                currentItem = currentItem.parent()
            if os.path.exists(currentItem.item_input_path):
                try:
                    # os.system("explorer /select," + currentItem.item_input_path)
                    command = 'explorer /select, {}"'.format(currentItem.item_input_path)
                    run(command, shell=True)
                except Exception as ex:
                    print(ex)
            else:
                currentItem.set_error(0)
                QMessageBox.critical(None, ' ', '不存在此文件', QMessageBox.Yes, QMessageBox.Yes)
    
        def open_output_directory(self):
            """
            在资源管理器显示显示输出文件
            """
            currentItem = self.currentItem()
            # InfoItem为子项,不具有该变量
            if type(currentItem) == InfoItem:
                currentItem = currentItem.parent()
            if os.path.exists(currentItem.item_output_path):
                try:
                    # os.system("explorer /select," + currentItem.item_output_path)
                    command = 'explorer /select, {}"'.format(currentItem.item_output_path)
                    run(command, shell=True)
                except Exception as ex:
                    print(ex)
            else:
                currentItem.set_error(1)
                QMessageBox.critical(None, '', '不存在此文件', QMessageBox.Yes, QMessageBox.Yes)
    
        def clear_item(self):
            """
            移除整个子项
            """
            currentItem = self.currentItem()
            if type(currentItem) == InfoItem:
                currentItem = currentItem.parent()
            try:
                rootIndex = self.indexOfTopLevelItem(currentItem)
                self.takeTopLevelItem(rootIndex)
            except Exception as ex:
                print(ex)
    
        def delete_self(self):
            """
            删除Json
            """
            currentItem = self.currentItem()
            if type(currentItem) == InfoItem:
                currentItem = currentItem.parent()
            try:
                reply = QMessageBox.question(None, '警告', '您确认删除文件吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if reply == QMessageBox.Yes:
                    if os.path.exists(currentItem.item_output_path):
                        os.remove(currentItem.item_output_path)
                    else:
                        currentItem.set_error(1)
                        QMessageBox.critical(None, ' ', '不存在此文件', QMessageBox.Yes, QMessageBox.Yes)
                        return
                    rootIndex = self.indexOfTopLevelItem(currentItem)
                    self.takeTopLevelItem(rootIndex)
            except Exception as ex:
                print(ex)
    
    
    class TreeItem(QTreeWidgetItem):
        """
        根子项
        """
    
        def __init__(self, parent=None, item_input_name='', item_output_name='', item_input_path='', item_output_path=''):
            super(TreeItem, self).__init__(parent)
            self.item_input_path = item_input_path
            self.item_output_path = item_output_path
            self.setText(0, item_input_name)
            self.setText(1, item_output_name)
            self.inputItem = InfoItem(self, 'input', self.item_input_path)
            self.outputItem = InfoItem(self, 'output', self.item_output_path)
    
        def set_error(self, code, message=''):
            """
            错误
            """
            try:
                if code == 0:
                    InfoItem(self, 'error', '无输入文件')
                elif code == 1:
                    InfoItem(self, 'error', '无输出文件')
                elif code == 2:
                    InfoItem(self, 'error', '格式转换失败:%s' % message)
            except Exception as ex:
                print(ex)
    
    
    class InfoItem(QTreeWidgetItem):
        """
        二级子项
        """
    
        def __init__(self, parent=None, item_type='', item_path=''):
            super(InfoItem, self).__init__(parent)
            self.setText(0, item_type)
            self.setText(1, item_path)
            self.item_output_path = self.parent().item_output_path
    
    展开全文
  • treewidget添加logo的小demo 欢迎交流!
  • QT5 ——TreeWidget

    2020-07-28 09:52:16
    在ui界面中添加TreeWidget控件 添加TreeWidget控件 #include <QTreeWidget> QTreeWidget *newTree; void TreeWidget_init(QTreeWidget *newTree); //初始化TreeWidget控件 void add_tree_node( ...

    在ui界面中添加TreeWidget控件

    添加TreeWidget控件

     #include <QTreeWidget>
     QTreeWidget *newTree;
     void TreeWidget_init(QTreeWidget *newTree); //初始化TreeWidget控件
     void add_tree_node( QTreeWidget *newTree,QString dev_IP,QString dev_chipid);//向TreeWidget中添加设备信息节点
    
        newTree=ui->treeWidget_Dev;//
    

    初始化TreeWidget

     TreeWidget_init(newTree); //TreeWidget初始化
        
        //TreeWidget初始化:建立对象、表头
        void MainWindow::TreeWidget_init(QTreeWidget *newTree) 
        {
            ui->treeWidget_Dev->clear();
    
            newTree->headerItem()->setText(0,QString());	//设置表头为空
            QStringList hraders;
            hraders<<"ID"<<"name";  //显示的设备列表信息
            newTree->setHeaderLabels(hraders);		//添加树表的表头
       }
    

    向TreeWidget添加节点

    void MainWindow::add_tree_node( QTreeWidget *newTree,QString dev_ID,QString dev_name)
    {
        QTreeWidgetItem *item1 = new QTreeWidgetItem(newTree);	//
     // QTreeWidgetItem *item1 = new QTreeWidgetItem(ui->treeWidget_Dev);//这种添加方法也可以
        item1->setText(0,dev_ID);     //ID                                                                //Qt::ItemIsEnabled 项目上是否没有被禁用(Enabled可用/Disabled禁用)
        item1->setCheckState(0,Qt::Unchecked);		//添加复选框,默认未勾选
        item1->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled); //Qt::ItemIsSelectable表示可选的、Qt::ItemIsUserCheckable项目上是否有复选框                
        item1->setText(1,dev_name);//设备dev_chipid
    }
    
        QTreeWidgetItem *itme1=new QTreeWidgetItem();
        itme1->setText(0,"11");
        itme1->setText(1,"22");
        itme1->setCheckState(0,Qt::Unchecked);
        item->addChild(itme1);
    

    勾选复选框的函数响应

    private slots:
        void on_treeWidget_Dev_itemChanged(QTreeWidgetItem *item); //通过右键菜单添加槽函数
    
    void MainWindow::on_treeWidget_Dev_itemChanged(QTreeWidgetItem *item)//勾选复选框
    {
        if(Qt::Checked==item->checkState(0)) //应为复选框设置在序号0的位置
        {
            qDebug()<<"checked text"<<item->text(0);//column=0
        }
    }
    

    展开全部节点

    ui->treeWidget_Dev->expandAll();
    

    添加TreeWidget右键菜单

    方法1:使用右键建立槽

     ui->treeWidget_1->setContextMenuPolicy(Qt::CustomContextMenu);//开启右键菜单
     
     void MainWindow::on_treeWidget_1_customContextMenuRequested(const QPoint &pos)//对应的槽函数
    {
        QMenu *dock_menu=new QMenu(ui->treeWidget_1);
        QAction *add_act=new QAction("add",this);
        QAction *del_act=new QAction("del",this);
        dock_menu->addAction(add_act);
        dock_menu->addAction(del_act);
        connect(add_act,&QAction::triggered,this,&MainWindow::action_add);
     //   connect(del_act,&QAction::triggered,this,SLOT(action_del));//此种表达方式报错
        connect(del_act,&QAction::triggered,this,&MainWindow::action_del);
        dock_menu->exec(QCursor::pos());
    
        qDebug()<<"hhh"<<pos.x();
    }
    

    方法2:使用connect方法建立

    private slots:
       void slotCustomContextMenu(const QPoint &);
    
     connect(ui->treeWidget_1,SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(slotCustomContextMenu(const QPoint &)));
    
         void MainWindow::slotCustomContextMenu(const QPoint &pos)//
       {
           //添加汉字菜单项
            QAction deleteWell(QString::fromLocal8Bit("&删除"),this);//删除
            QAction reNameWell(QString ::fromLocal8Bit("&重命名"),this);//重命名
            connect(&deleteWell, SIGNAL(triggered()), this, SLOT(deleteItem()));
            connect(&reNameWell,SIGNAL(triggered()),this,SLOT(renameWell()));
    
            QMenu menu(ui->treeWidget_1);   //menu的新定义方法
            menu.addAction(&deleteWell);
            menu.addAction(&reNameWell);
            menu.exec(QCursor::pos());  //在当前鼠标位置显示
    }
    

    运行效果:
    在这里插入图片描述

    双击可修改节点

    添加信号和槽
    在这里插入图片描述

    void MainWindow::on_treeWidget_1_itemClicked(QTreeWidgetItem *item, int column)
    {
        if(column!=0)
        {
            item->setFlags(Qt::ItemIsEditable|Qt::ItemIsEnabled|Qt::ItemIsEnabled);
        }
        else
        {
            qDebug()<<"未选中项";
            item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsEnabled);
        }
    }
    

    使用自定义结构体

    参看QTreeWidget存放自定义数据

    #include<QMetaType>
    
    struct user:public QObjectData
    {
        QString name;
        QString id;
    };
    Q_DECLARE_METATYPE(user)
    

    该结构体定义的位置为:
    在这里插入图片描述

    • setData:与节点相关的数据,我要用到,但不必显示在树上
    #include<QVariant>
    [virtual] void QTreeWidgetItem::setData(int column,int role, const QVariant & value)
    //设置第column列指定角色role的数值
    

    更多TreeWidget函数使用方法:Qt中文手册 之 QTreeWidgetItem

     //-----使用setData,写入数据
        QTreeWidgetItem *item_setdata=new QTreeWidgetItem(ui->treeWidget_1);
        item_setdata->setText(0,"test");
        item_setdata->setData(0,Qt::UserRole,QVariant::fromValue(20));
        user user1;
        user1.id="id1";
        user1.name="name1";
        item_setdata->setData(0,Qt::UserRole+1,QVariant::fromValue(user1));
    

    使用上面这样的写法,报错。因为QTreeWidget有2列,这里只写入一列数据。运行后item.text(0)=0

     //-----使用setData
        QTreeWidgetItem *item_setdata=new QTreeWidgetItem(ui->treeWidget_1);
        item_setdata->setText(0,"test");
        item_setdata->setText(1,"test1");
        item_setdata->setCheckState(0,Qt::Unchecked);
        item_setdata->setData(0,Qt::UserRole,QVariant::fromValue(20));
        user user1;
        user1.id="id1";
        user1.name="name1";
        item_setdata->setData(0,Qt::UserRole+1,QVariant::fromValue(user1));
    
    
    //------读取QTreeWidget中的Data
    void MainWindow::on_treeWidget_1_itemClicked(QTreeWidgetItem *item, int column)
    {
        qDebug()<<"column:"<<QString(column);
        if(column!=0)//column: "\u0001"
        {
            item->setFlags(Qt::ItemIsEditable|Qt::ItemIsEnabled|Qt::ItemIsEnabled);
            qDebug()<<"text:"<<item->text(0);
            //------------读取setData中数据
            if(item->text(0)=="test")
            {
                user user2=item->data(0,Qt::UserRole+1).value<user>();
                qDebug()<<"user.name:"<<user2.name<<"user.id:"<<user2.id;
            }
        }
        else
        {
            qDebug()<<"未选中项";
        }
    }
    

    在这里插入图片描述

    展开全文
  • QT treeWidget 自动加载盘符,带checkbox,点击checkbox或展开节点,将动态加载下一级的所有文件夹和文件。废话不多说,请看代码。
  • treeWidget动态改动每个节点。由主节点、子节点、删除、编辑。 每个节点是由选项框选中的,并且关联了父节点。也就父节点勾选中后,子节点都会勾选中。
  • 本程序实现在TreeWidget中添加根节点 子节点 ,删除节点(根节点和子节点),修改节点 几种功能模块
  • 隐藏treewidget某一列

    千次阅读 2019-10-24 14:07:35
    ui->treeWidget->hideColumn(1);//隐藏第二列 ui->treeWidget->hideColumn(0);//隐藏第一列

    ui->treeWidget->hideColumn(1);//隐藏第二列
    ui->treeWidget->hideColumn(0);//隐藏第一列

    展开全文
  • Qt treewidget 搜索节点

    2020-11-20 18:19:27
    标题Qt treewidget 搜索节点 connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(Search())); void MainWindow::Search(){ QString searchword=ui->lineEdit->text();//查找的内容 for(int m=...
  • QT treeWidget 加载指定路径所有文件夹和文件,带checkbox 整合了一些网络文章内容做出来的小程序,抛砖引玉吧
  • QT treeWidget item排序的问题

    千次阅读 2019-09-30 11:04:25
    ui.treeWidget->setSortingEnabled(true); ui.treeWidget->header()->setSortIndicatorShown(true); ui.treeWidget->header()->setSortIndicator(0, Qt::AscendingOrder);//这三句改变排序
  • QT读取xml文件将所有节点保存到treewidget
  • 本例中实现了对treeWidget和stackWidget的应用,实现了列表的样式,是一个小demo
  • 如下所示: # -*- coding: utf-8 -*- import sys from PySide.QtGui import * from PySide.QtCore import * global Item_temp Item_temp='' ... self.tree = QTreeWidget() # 实例化一个TreeWidget
  • treeWidget键盘事件冲突

    2017-09-16 15:13:33
     ui上添加了treeWidget控件,但是在mainwindow中用到了键盘事件(键盘上的上下左右键的press事件),程序运行之后,按下Qt::Key_Up,Qt::Key_Down,Qt::Key_Left,Qt::Key_Right按键后会同时相应treeWidget的键盘事件...
  • 我有一个treewidget树,在点击修改节点的时候会有一个对话框,里面会有一些行编辑框比如节点名称,参数,图标,类型这些东西,要怎么做在打开这个对话框的时候显示每个节点独有的数据,修改后也会有相应的改变
  • QT_ListWidget、TreeWidget

    2021-04-01 09:17:12
    他不像TreeWidgetTreeWidget有header,就比如数据库里表table,就是TreeWidget) 而ListWidget,就简单的多 ' 新增: ' text: ui->listWidget->addItem("111"); ui->listWidget->addItem("222")...
  • 坑, TreeWidgetItem里边有个layout, layout里边有个控件, 当我遍历TreeWidget所有的Item时,如何获取TreeWidgetItem中的控件状态呢? 坑
  • qt中treeWidget删除所有项目

    千次阅读 2020-04-24 17:00:52
    int hang = ui.treeWidget->currentIndex().row(); //root->removeChild(ui.treeWidget->currentItem());//针对子项的删除 ui.treeWidget->takeTopLevelItem(hang); 然后想着所有项目的删除应该是这样...
  • qt treeWidget 控制stackedwidget翻页

    千次阅读 2018-07-23 23:45:22
    treeWidget有一个双击事件响应函数 doubleClicked(const QModelIndex &amp;index)//index是用来表示行列和名称的。 void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &amp;index){ ui...
  • Qt基础05(treeWidget

    2021-04-24 16:40:08
    treewidget.cpp #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //treewodget树控件使用 //设置水平头 ui-&...
  • treeWidget->clear();
  • 1、TreeWidget ui->treeWidget->setColumnCount(1); //设置列数 ui->treeWidget->setHeaderLabel(tr("图像选择")); //设置头的标题 QTreeWidgetItem *imageItem1 = new QTreeWidgetItem(ui->...
  • 您好,我正在用python 学习pyqt5图形编程,用到一个树形菜单treeWidget,每个根节点和子节点都设置有“多选框”以任意选择那一项,请教,假如我选中了其中一个根节点和它的所有子节点,怎样把这个被选中的根节点及其...
  • QT中treeWidgetItem使用

    2020-02-10 21:36:12
    { ui->setupUi(this);...treeWidget->setHeaderLabels(QStringList()<<"英雄姓名"<<"英雄介绍"); //添加头项 QStringList l,m,f; //相当于C++中 list<string> l l<<"力量"...
  • PYQT treeWidget获取选中节点及节点完整索引 treeWidget由于没有现成的函数直接获取选中节点的完整索引,因此只能自己造轮子。总体思路是通过parent方法获取递归获取父节点,直到找到顶层。 ... self.treeWidget....
  • TreeWidget 与 TreeView 中实现右键菜单稍有不同, TreeView 中是靠信号与槽 connect(ui->treeView,SIGNAL(customContextMenuRequested(constQPoint&)), this,SLOT(onCustomContextMenuRequested(constQPoint&))); ...
  • 教程的代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->... //treeWidget树控件使用 //设置头 ui->...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,174
精华内容 869
关键字:

treewidget