之前一直被这个问题困扰着,因为我用的是QTableWidgetItem自带的QCheckBox。所以想使这个QCheckBox禁用时,根本就获取不到这个对象,只能获取它的状态。今天觉得肯定有办法解决时又继续纠结这个问题来了。所以继续查找资料,看别人的博客,之后无意进到了一个国外的论坛,看到了QTreeWidget的setItemWidget方法。方法的原型为:void QTreeWidget::setItemWidget ( QTreeWidgetItem * item, int column, QWidget * widget );它的作用是为item的第几列设置一个widget控件。而获取item列里面的控件时的方法为:QWidget * QTreeWidget::itemWidget ( QTreeWidgetItem * item, int column ) const;返回控件的指针。
下面贴上代码:.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QCheckBox>
#include <QHBoxLayout>
#include <QMessageBox>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QTreeWidget *treeWidget;
QHBoxLayout *hLayout;
};
#endif // WIDGET_H
.cpp:
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
hLayout = new QHBoxLayout(this);
treeWidget = new QTreeWidget(this);
treeWidget->setColumnCount(2);
QTreeWidgetItem *top = new QTreeWidgetItem;
top->setText(0,"top");
treeWidget->addTopLevelItem(top);
QCheckBox *ckBox = new QCheckBox;
ckBox->setText("CheckBox");
ckBox->setChecked(true);
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0,"title");
top->addChild(item);
treeWidget->setItemWidget(item,1,ckBox); //设置ckBox为item的第二列
QCheckBox *cpy = (QCheckBox*)treeWidget->itemWidget(item,1);
QMessageBox::information(this,"title",cpy->text()); //获取item中Checkbox的文本值
hLayout->addWidget(treeWidget);
this->setLayout(hLayout);
}
Widget::~Widget()
{
}