#include <QApplication>
#include <QTableWidget>
#include <QStyledItemDelegate>
#include <QScopedPointer>
#include <QSpinBox>
#include <QPainter>
class Delegate: public QStyledItemDelegate
{
Q_OBJECT
public:
QStyledItemDelegate(p),
{
}
{
if (!index.isValid()) return;
const int value = index.data(Qt::EditRole).toInt();
spin->setValue(value);
spin->setFrame(false);
spin->resize(option.rect.size());
QPixmap pixmap
(option.
rect.
size());
spin->render(&p);
p.end();
painter->drawPixmap(option.rect, pixmap);
}
private:
QScopedPointer<QSpinBox> spin;
};
int main(int argc, char **argv)
{
t.setItemDelegateForColumn(1, new Delegate(&t));
for (int i = 0; i < 10; ++i) {
t.setItem(i, 0, item);
item->setData(Qt::EditRole, i);
t.setItem(i, 1, item);
}
t.show();
return app.exec();
}
#include "main.moc"
#include <QApplication>
#include <QTableWidget>
#include <QStyledItemDelegate>
#include <QScopedPointer>
#include <QSpinBox>
#include <QPainter>
class Delegate: public QStyledItemDelegate
{
Q_OBJECT
public:
Delegate(QObject *p = 0):
QStyledItemDelegate(p),
spin(new QSpinBox)
{
}
void paint (QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (!index.isValid()) return;
const int value = index.data(Qt::EditRole).toInt();
spin->setValue(value);
spin->setFrame(false);
spin->resize(option.rect.size());
QPixmap pixmap(option.rect.size());
QPainter p(&pixmap);
spin->render(&p);
p.end();
painter->drawPixmap(option.rect, pixmap);
}
private:
QScopedPointer<QSpinBox> spin;
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QTableWidget t(10, 2);
t.setItemDelegateForColumn(1, new Delegate(&t));
for (int i = 0; i < 10; ++i) {
QTableWidgetItem *item = new QTableWidgetItem(QString("Row %1").arg(i));
t.setItem(i, 0, item);
item = new QTableWidgetItem;
item->setData(Qt::EditRole, i);
t.setItem(i, 1, item);
}
t.show();
return app.exec();
}
#include "main.moc"
To copy to clipboard, switch view to plain text mode
For production use with a complex editor widget you might cache pixmaps.
Bookmarks