之前一直被这个问题困扰着,因为我用的是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
#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);
-
- QCheckBox *cpy = (QCheckBox*)treeWidget->itemWidget(item,1);
- QMessageBox::information(this,"title",cpy->text());
-
- hLayout->addWidget(treeWidget);
- this->setLayout(hLayout);
- }
-
- Widget::~Widget()
- {
-