use*_*508 4 qt qtablewidget qtablewidgetitem
我有使用qt设计器制作的自定义小部件,我想将它添加到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 );
}
Run Code Online (Sandbox Code Playgroud)
你的代码是正确的,所以我唯一想到的是你没有setColumnCount(1)beforefor循环。如果不是这种情况,您可以尝试在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 );
}
Run Code Online (Sandbox Code Playgroud)
如果您确实需要item(“第一行”和“第三行”),您应该这样设置:QTableWidgetItem* item = new QTableWidgetItem("");,否则您不需要这些行,您CustomWdg的设置正确setCellWidget
如果要将自定义窗口小部件添加到表格单元格中,可以使用QItemDelegate.
创建自己的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;
};
Run Code Online (Sandbox Code Playgroud)
然后使用此方法为您自己设置表的委托.
setItemDelegate(QAbstractItemDelegate *)
setItemDelegateForColumn(int, QAbstractItemDelegate *)
setItemDelegateForRow(int, QAbstractItemDelegate *)
Run Code Online (Sandbox Code Playgroud)
我试过这段代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
| 归档时间: |
|
| 查看次数: |
20133 次 |
| 最近记录: |