如果你想定製的小部件添加到您可以使用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;
}
和結果是:
給定的代碼看起來是正確的,我會懷疑的東西是錯誤與自定義小部件本身。 – Chris 2012-04-25 14:27:36
自定義小部件是在qt設計器中製作的標準小部件,它有兩個按鈕和兩個標籤。我從QWidget繼承。我不知道那可能是錯的。 – user152508 2012-04-25 14:30:36
如果您在其他上下文中使用小部件,它是否可見並且可用? – Chris 2012-04-25 15:57:00