单击非叶项的复选框时,QTreeWidget无法正常工作。我的QTreeWidget有两级子级,可以检查树小部件中的每个项目(为每个项目启用复选框)。在此QTreeWidget中,叶项是用户可选择的,但非叶项不可选,并且所有项都已启用且用户可以检查。
[]Family node1
- []Primary node1
- []child1
- []Secondary node1
- []child1
[]Family node2
- []Primary node2
- []child2
- []Secondary node2
- []child2
叶子项目标记设置
Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled
非叶项目标记设置
Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsTristate
当我们直接点击叶子项的相关复选框时,Qt正在生成currentItemChanged()信号。但是,当我们直接单击非叶子项的相关复选框时,则不会生成currentItemChanged()信号。这会导致非叶子物品处理的不便。
它在Qt 4.7.4中运行良好,但它在所有平台(Windows,Darwin和Linux)上都不适用于Qt 4.8.1。
我附上了一个示例程序来重现这个错误。
这是错误还是预期的行为?
我在使用Qt 4.8的所有平台(Linux CentOS,Windows 7和MacOS)上注意到这个错误。
答案 0 :(得分:0)
也许你正在寻找这样的东西:
//widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QTreeWidgetItem;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void slotTest(QTreeWidgetItem *ite,int idx);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include <QtGui>
Widget::~Widget()
{
delete ui;
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->treeWidget->setColumnCount(1);
QList<QTreeWidgetItem *> items;
QTreeWidgetItem * item;
for (int i = 0; i < 10; ++i)
{
item = new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i)));
item->setCheckState(0,i%2 == 0 ? Qt::Unchecked : Qt::Checked);
items.append(item);
}
connect(ui->treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(slotTest(QTreeWidgetItem*,int)));
ui->treeWidget->insertTopLevelItems(0, items);
}
void Widget::slotTest(QTreeWidgetItem *ite,int idx)
{
if(ite)
{
qDebug() << ite->text(0);
}
}
//widget.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>274</width>
<height>210</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTreeWidget" name="treeWidget">
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>