に設定され、そうでなければ、これらの行を必要としない、QTableWidgetItem* item = new QTableWidgetItem("");
:あなたはこのようにそれを設定する必要があります。
独自のDelegateクラスを作成し、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
カスタムウィジェットはqtデザイナーで作成された標準のウィジェットで、2つのボタンと2つのラベルがあります。私はQWidgetを継承しています。私は何が間違っているのか分からない。 – user152508
別のコンテキストでウィジェットを使用している場合は、それを表示して使用できますか? – Chris