Qt 图表UI QTreeWidget

QTreeWidget和QTreeView区别,应该使用哪一个

  Qt界面中需要使用图表的时候,默认提供两个widget QTreeWidgetQTreeView
  如果你需要给QTreeWidget增加新建后删除后各种ui变化,选中后各种ui变化等等特殊效果/事件,建议不要用QTreeWidget和Item,使用mode/viewQTreeWidget最好仅用在表格变化不大的地方。比如固定的列表信息、固定尺寸报表等。
  两个大致区别是 QTreeWidget继承自QTreeView。Qt表格显示使用的是 view/mode 模式,界面和数据分开,两者使用代理链接。QTreeView就是界面,如果需要修改数据则应该通过代理。比如Qt封装好的QFileSystemModel在view中显示,就是典型的mode/view结构。
在这里插入图片描述
  QTreeView提供了一个接口,setModel用来设置mode(也就是数据)。QTreeWidget作用就是默认包含了一个mode,并增加了如果操作这个默认mode的接口。QTableWidget类提供具有默认模型的基于项目的表视图。这样当使用QTreeWidget时候会简单很多,当然他也引入了一写新的问题,比如默认带了表视图,当我图表视图ui很复杂时候不太方便实现,而且数据没有分开逻辑不清晰。
在这里插入图片描述
  自己的项目中应该使用那个看情况,如果你的图表ui不复杂,跟QTableWidget默认的图表视图差异不大,而且不需要跟这个Mode关联(比如QSql、QFile),应该使用QTableWidget,反之则用QTreeView
  (以上属于个人理解,如果错误请指出)

QTreeWidget常用样式表

QTreeWidget {
    border-radius:5px;
    font-size:20px;
    background: rgb(79, 79, 83);
    outline:0px;
}
QTreeWidget::item {
    color:rgb(233, 233, 233);
    background: rgb(79, 79, 83);
	min-height: 30px;
}
QTreeWidget::item:alternate {
    background: rgb(79, 79, 83);
}
QHeaderView {
    color: white;
}
QHeaderView::section {
    background-color: rgb(105, 106, 111);
    border:none;
    font-size:20px;
}

在这里插入图片描述

QTreeWidget {
    border-radius:5px;
    font-size:14px;
    background: rgb(79, 79, 83);
    outline:0px;
}
QTreeWidget::item {
    color:rgb(233, 233, 233);
    background: rgb(87, 87, 91);
    padding:0px 14px;
	min-height: 40px;
}
QTreeWidget::item:alternate {
    background: rgb(79, 79, 83);
}
QTreeWidget::item:selected, QTreeWidget::item:hover  {
	background: rgb(104, 104, 108);
}
QHeaderView {
    color: white;
    text-align:center;
}
QHeaderView::section {
    background-color: rgb(105, 106, 111);
    border:none;
    font-size:14px;
    padding:0px 14px;
}

在这里插入图片描述

QTreeView{
border:1px solid #0F1F2F;
selection-background-color:#265687;
selection-color:#4894C6;
alternate-background-color:#265687;
gridline-color:#0F1F2F;
}
QTreeView::branch:closed:has-children{
margin:4px;
border-image:url(:/qss/blackblue/branch_open.png);
}

QTreeView::branch:open:has-children{
margin:4px;
border-image:url(:/qss/blackblue/branch_close.png);
}

QTreeView,QTreeView::branch{
background:#1B3149;
}
QTreeView::item:selected{
color:#4894C6;
background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #243D5B,stop:1 #243D5B);
}
QTreeView::item:hover,QHeaderView{
color:#4894C6;
background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #265687,stop:1 #265687);
}
QTreeView::item{
padding:1px;
margin:0px;
}

在这里插入图片描述

QTreeWidget常用属性


QTreeview有的接口QTreeWidget基本都可以使用,下边这里几个是QTreeWidget可以使用QTreeview常用接口

ui->treeWidget->setAutoExpandDelay(-1);//节点展开鼠标悬停时间
ui->treeWidget->setIndentation(10);//缩进字节(添加自定义图标用的)
ui->treeWidget->setRootIsDecorated(1);//第一列是否缩进(添加自定义图标用的)
ui->treeWidget->setUniformRowHeights(1);//强制所有项等高
ui->treeWidget->setItemsExpandable(1);//是否支持展开折叠
ui->treeWidget->setSortingEnabled(1);是否支持自动排序(如果需要排序的表格一般都常常改变,建议别用QTreeWidget了)
ui->treeWidget->setAnimated(1);//是否支持动画,这个需要单独在定义显示动画
ui->treeWidget->setAllColumnsShowFocus(1);//选中是焦点在本格还是本行(节点)
ui->treeWidget->setWordWrap(1);//自动换行,如果文字太多想用...省略的话,用矩形框把qstring封一下在画
ui->treeWidget->setHeaderHidden(0);//是否显示标题,下边有一个Visible,区别在于Visible是隐藏Hidden是在内存销毁
ui->treeWidget->setExpandsOnDoubleClick(0);//双击是否可以展开子节点。其实如果有节点的话还是建议用mode/view

QTreeWidget专有的
1.ui上Widget显示几列

ui->treeWidget->setColumnCount(2);

QTreeWidget的head专有的
1.Widget表头是否可见

ui->treeWidget->header()->setVisible(1);

2.Widget表头顺序是否可以拖动改变

ui->treeWidget->header()->setCascadingSectionResizes(1);

3.Widget表头文字属性(居中?靠左?靠右?)

ui->treeWidget->header()->setDefaultAlignment(Qt::Alignment alignment);

在这里插入图片描述
4.Widget表头宽度

 ui->treeWidget->header()->setDefaultSectionSize(100);

5.Widget被选部分是否高亮显示

 ui->treeWidget->header()->setHighlightSections(1);

6.Widget各个区域的最小值

 ui->treeWidget->header()->setMinimumSectionSize(50);

7.Widget排序按钮是否显示

  ui->treeWidget->header()->setSortIndicatorShown(1));

8.Widget最后一个区域是否占满表格余下的所有部分

  ui->treeWidget->header()->setStretchLastSection(1);
    for (qint32 i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
        QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i);
        if (item) {
            item->setFlags(item->flags() | Qt::ItemIsEditable);
        }
    }

QTreeWidget 设置表格可以编辑/选中/不可编辑等等

    for (qint32 i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
        QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i);
        if (item) {
            item->setFlags(item->flags() | Qt::ItemIsEditable);
        }
    }
Qt.NoItemFlags          0   没有设置任何属性。
Qt.ItemIsSelectable     1   可以选择。
Qt.ItemIsEditable       2   可以编辑。
Qt.ItemIsDragEnabled    4   可以拖动它。
Qt.ItemIsDropEnabled    8   它可以用作放置目标。
Qt.ItemIsUserCheckable  16  用户可以选中或取消选中它。
Qt.ItemIsEnabled        32  用户可以与项目交互。
Qt.ItemIsTristate       64  该项可通过三个独立的状态进行检查。

可以看到上面没有不可以编辑这个选项,我现在用法是。如果需要把某几个设置为不可以编辑的话,直接自定义一个QStyledItemDelegate,让后把DisableEditor返回空算了(比较傻哈),比如下边是设置第一列可以编辑,后边几列不可以编辑。其实如果你要是都不可以编辑的话,初始化默认就是不可编辑的,什么都不用加。


class DisableEditor : public QStyledItemDelegate {
  public:
    explicit DisableEditor(QWidget *parent = nullptr);

    virtual QWidget *createEditor(
        QWidget *parent,
        const QStyleOptionViewItem &option,
        const QModelIndex &index) const override ;
};
DisableEditor::DisableEditor(QWidget *parent)
    : QStyledItemDelegate(parent) {
}
QWidget *DisableEditor::createEditor(
    QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
    Q_UNUSED(parent);
    Q_UNUSED(option);
    Q_UNUSED(index);
    return nullptr;
}
    for (qint32 i = 1; i < ui->treeWidget->columnCount(); ++i) {
        ui->treeWidget->setItemDelegateForColumn(
            i, new DisableEditor(ui->treeWidget));
    }
  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值