QTreeWidget中对于其中item的可编辑属性的设置

看下文档描述先

enum Qt::ItemFlag
flags Qt::ItemFlags

This enum describes the properties of an item:

Constant Value Description
Qt::NoItemFlags 0 It does not have any properties set.
Qt::ItemIsSelectable 1 It can be selected.
Qt::ItemIsEditable 2 It can be edited.
Qt::ItemIsDragEnabled 4 It can be dragged.
Qt::ItemIsDropEnabled 8 It can be used as a drop target.
Qt::ItemIsUserCheckable 16 It can be checked or unchecked by the user.
Qt::ItemIsEnabled 32 The user can interact with the item.
Qt::ItemIsTristate 64 The item is checkable with three separate states.

Note that checkable items need to be given both a suitable set of flags and an initial state, indicating whether the item is checked or not. This is handled automatically for model/view components, but needs to be explicitly set for instances of QListWidgetItem,QTableWidgetItem, and QTreeWidgetItem.

The ItemFlags type is a typedef for QFlags. It stores an OR combination of ItemFlag values.

 

注意最后一句,ItemFlags存储的是几个ItemFlag的逻辑或的结果。

所以设置某个Item可编辑时,可以item->setFlags(Qt::ItemIsEditable |Qt::ItemIsEnabled);

 

 

QTreeWidget中设置字体颜色

QTreeWidget *A = new QTreeWidget;
QTreeWidgetItem *child=new QTreeWidgetItem(QStringList(tr(portDesAndName.c_str())));
/*蓝色表示正在工作*/
child->setForeground(0,QBrush(QColor(Qt::blue)));
A->addChild(child);

 

 

 访问QTreeWidget子节点的方法
QTreeWidget中有个itemAt函数,我以为像是QTabelWidget那样可以直接定位到节点的,结果试了下,发现不行。后来发现,对于顶层节点,可以使用treeWidget->topLevelItem(int index)返回,然后对于返回的item,可以一直使用item->child(int column)向下遍历。
关于QTreeWidget的HeadView设置背景图片问题
我们可以很容易的使用setstylesheet或者其他设置背景的方法给控件设置背景,对于QTreeWidget,它是一个Widget的子类,那么当然我们可以使用样式表对其设计背景。
通常代码格式如下:
ui.treeWidget->setObjectName("treeWidget");
ui.treeWidget->setStyleSheet("QWidget#treeWidget{background-image: url(./pic/netJiedianBg.png);}");
但是,实际情况并不像我们想象的那么乐观,例如以下设计好的图片
QTreeWidget中对于其中item的可编辑属性的设置_第1张图片

我们在实际实现时,如果只使用上面的代码后的实际情况是如下所示
QTreeWidget中对于其中item的可编辑属性的设置_第2张图片
可以看到最上面有一条其实还是默认的颜色,这个就需要我们再单独设置其背景图片
首先要把那个横条返回,其实就是Treewidget的Header,然后对返回到Header设置背景即可,方法可能有多种,把Header作为一个Widget使用样式表加图片的方法不知道为什么不行,所以换了种方法,在header里添加一个label,然后设置其布局充满整个HEADER,在label上加图片。经过试验是可以的。
代码如下:
QHeaderView *headview = ui.treeWidget->header();
QLabel *label = new QLabel("aaa");
label->setPixmap(QPixmap("./pic/netJiedian.png"));
QHBoxLayout *lay = new QHBoxLayout;
lay->setMargin(0);
lay->addWidget(label);
headview->setLayout(lay);
添完后的效果图如下:
QTreeWidget中对于其中item的可编辑属性的设置_第3张图片

 


 


获得Qtreewidget 上双击的那行的数据简单demo

 

 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

ui->treeWidget->setColumnCount(1);
    QTreeWidgetItem *root=new   QTreeWidgetItem(ui->treeWidget,QStringList(QString("ROOST")));
    QTreeWidgetItem *leaf=new   QTreeWidgetItem(root,QStringList(QString("children")));
    root->addChild(leaf);
    QTreeWidgetItem *leaf1=new   QTreeWidgetItem(root,QStringList(QString("children1")));
     root->addChild(leaf1);

    QTreeWidgetItem *leaf2=new   QTreeWidgetItem(root,QStringList(QString("children2")));
     root->addChild(leaf2);
    QTreeWidgetItem *leaf3=new   QTreeWidgetItem(root,QStringList(QString("children3")));
     root->addChild(leaf3);

    QListrootList;
    rootList<    ui->treeWidget->insertTopLevelItems(0,rootList);
}

 

private slots:
    void on_treeWidget_doubleClicked(QModelIndex index);

void MainWindow::on_treeWidget_doubleClicked(QModelIndex index)
{
    index=ui->treeWidget->currentIndex();
    ui->lineEdit->setText(index.data().toString());
}

你可能感兴趣的:(QT)