添加自定义小部件到QTableWidget单元格
问题描述:
我有自定义小部件使用qt设计器,我想将它添加到QTableWidget单元格。 但它不起作用。添加自定义小部件到QTableWidget单元格
下面是代码:
int nRows =10;
for(int row = 0; row < nRows;row++;)
{
QTableWidgetItem* item = new QTableWidgetItem();
CustomWdg* wdg=new CustomWdg();
mTableWdg->insertRow(row);
mTableWdg->setItem(row, 0, item);
mTableWdg->setCellWidget(row, 0, wdg);
}
答
如果你想定制的小部件添加到您可以使用QItemDelegate表格单元格设置。
创建您自己的委托类并从QItemDelegate继承它。
class MyDelegate : public QItemDelegate
{
public:
CChoicePathDelegate (QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; //delegate editor (your custom widget)
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const; //transfer editor data to model
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
};
然后在您自己的方法中为这个方法设置委托。
setItemDelegate(QAbstractItemDelegate *)
setItemDelegateForColumn(int, QAbstractItemDelegate *)
setItemDelegateForRow(int, QAbstractItemDelegate *)
我曾尝试这样的代码:
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QHBoxLayout *l = new QHBoxLayout();
l->addWidget((new QPushButton("I`m in cell")));
l->addWidget((new QLabel("Test label")));
QWidget *w = new QWidget();
w->setLayout(l);
ui->tableWidget->setCellWidget(1,1, w);
}
Widget::~Widget()
{
delete ui;
}
和结果是:
答
你的代码是正确的,让我想到的唯一的事情是,你没有setColumnCount(1)
以前for
循环。如果不是的话,你可以尝试设置行和列数之前for
循环中循环,而不是插入一行一行:
int nRows =10;
mTableWdg->setRowCount(nRows);
mTableWdg->setColumnCount(1);
for(int row = 0; row < nRows;row++;)
{
//QTableWidgetItem* item = new QTableWidgetItem();// line one
CustomWdg* wdg=new CustomWdg();
//mTableWdg->setItem(row, 0, item);// line three
mTableWdg->setCellWidget(row, 0, wdg);
}
如果你真的需要item
(“行一个”和“线三条”)你应该设置这样的:QTableWidgetItem* item = new QTableWidgetItem("");
,否则你不需要这些行,你CustomWdg
正确地与setCellWidget
给定的代码看起来是正确的,我会怀疑的东西是错误与自定义小部件本身。 – Chris 2012-04-25 14:27:36
自定义小部件是在qt设计器中制作的标准小部件,它有两个按钮和两个标签。我从QWidget继承。我不知道那可能是错的。 – user152508 2012-04-25 14:30:36
如果您在其他上下文中使用小部件,它是否可见并且可用? – Chris 2012-04-25 15:57:00