Qt QTreeWidget的行间距设置

来源:互联网 发布:网络三剑客官方下载 编辑:程序博客网 时间:2024/05/20 19:48

QT,QTreeWidget,setItemWidget方法 [bq]

ui.setupUi(this);

 connect(ui.deleteItems, SIGNAL(clicked()), this, SLOT(OnBtnClicked())); // signal->slot


 ui.treeWidget->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 设置多选,单选
 ui.treeWidget->setColumnCount(1);  // 设置列的数目
 //ui.treeWidget->setStyleSheet("QTreeWidget::item{height:75px}");  // 设置QSS——行的高度(行间距),可以在designer里面设置!

 

 // root 1
 myWidget* aRoot_widget_1 = new myWidget;
 QTreeWidgetItem* arootItem_1 = new QTreeWidgetItem(ui.treeWidget);
 ui.treeWidget->setItemWidget(arootItem_1, 0, aRoot_widget_1);   

 

 // root1->child1
 QTreeWidgetItem* childItem_1 = new QTreeWidgetItem(arootItem_1);
 childWidget* child_widget_1 = new childWidget;
 child_widget_1->SetInfo(QString("child_1"));
 ui.treeWidget->setItemWidget(childItem_1, 0, child_widget_1);

 

 // root1->child2
 QTreeWidgetItem* childItem_2 = new QTreeWidgetItem(arootItem_1);
 childWidget* child_widget_2 = new childWidget;
 child_widget_2->SetInfo(QString("child_2"));
 ui.treeWidget->setItemWidget(childItem_2, 0, child_widget_2);

 

 

 // root2
 myWidget* aRoot_widget_2 = new myWidget;
 QTreeWidgetItem* aRootItem_2 = new QTreeWidgetItem(ui.treeWidget);
 ui.treeWidget->setItemWidget(aRootItem_2, 0, aRoot_widget_2);   

 

 // root2->child3
 QTreeWidgetItem* childItem_3 = new QTreeWidgetItem(aRootItem_2);
 childWidget* child_widget_3 = new childWidget;
 child_widget_3->SetInfo(QString("child_3"));
 ui.treeWidget->setItemWidget(childItem_3, 0, child_widget_3);

 

 // root2->child4
 QTreeWidgetItem* childItem_4 = new QTreeWidgetItem(aRootItem_2);
 childWidget* child_widget_4 = new childWidget;
 child_widget_4->SetInfo(QString("child_4"));
 ui.treeWidget->setItemWidget(childItem_4, 0, child_widget_4);

 ui.treeWidget->removeItemWidget(childItem_4, 0);

 

// 说明:

1.myWidget和childWidget为自定义widget(继承于QWidget)widget控件,添加方法为在vs2008/2010/2012里面右键选择“添加类”->"Qt4/5GuiClass";

2.在添加自定义widget控件后在QTreeWidget里面可能会出现看不到自定义widget控件的问题,出现问题的原因是QTreeWidget控件的行间距没有设置正确,但是很奇怪的是通过QTreeWidget的setLineWidth方法却不能起作用,正确的做法是设置QTreeWidgetd的CSS属性,具体方法为右键选择“改变样式表...”(在designer里面进行操作),然后在里面添加

#treeWidget::item

{

height:75px;

width:300px;

}

 其中#的意思为treeWidget为该样式表的名字,也可以选择直接输入height:75px;width:300px;表示不给该样式表起名字;

此外,还可以通过在代码中设置QTreeWidget的样式表,ui.treeWidget->setStyleSheet("QTreeWidget::item{height:75px}"); 

 

// one more(下划线)

text-decoration:underline;             // 下划线

text-decoration:overline;                     // 上划线

(QSS < CSS)

 

3.关于setItemWidget方法介绍:

void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);

第一个参数为一个QTreeWidgetItem对象,需要明确的是我们的自定义的widget控件是依托于/存在于/放在QTreeWidgetItem对象上面的,这样以后就把QTreeWidgetItem对象与我们自定义的widget对象联系起来了;

第二个参数为列,指第几列;

第三个参数为我们自定义的widget控件。

需要理解QTreeWidget里面的父与子的关系!

4.关于QTreeWidgetItem的构造函数,这里用到了它的两种构造函数,一种是

    explicit QTreeWidgetItem(QTreeWidget *view, int type = Type); (在本例中为构造root节点)

一种是:

     explicit QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type);(在本例中为构造子节点,即root节点的字节点,所以parent即为通过上面构造函数创建的QTreeWidgetItem)。

5.本例效果图如下:


 

6.补注:

自定义widget被遮挡问题的解决办法除了上述解决办法外(上述解决办法有一个缺陷,即只能设置单一行高度,所有的行都用同一个行高度,不自由),最好的解决办法是设定自定义widget的最大宽度、高度和最小宽度、最小高度为自定义的宽度和高度即可解决该问题。

0 0
原创粉丝点击