qtableview的单元格怎么放一个button

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qtableview的单元格怎么放一个button相关的知识,希望对你有一定的参考价值。

参考技术A #ifndef BUTTONDELEGATE_H
#define BUTTONDELEGATE_H

#include <QItemDelegate>

class ButtonDelegate : public QItemDelegate

Q_OBJECT
public:
explicit ButtonDelegate(QObject *parent = 0);

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index);

signals:

public slots:

private:
QMap<QModelIndex, QStyleOptionButton*> m_btns;

;

#endif // BUTTONDELEGATE_H
#include "buttondelegate.h"

#include <QApplication>
#include <QMouseEvent>
#include <QDialog>
#include <QPainter>
#include <QStyleOption>
#include <QDesktopWidget>

ButtonDelegate::ButtonDelegate(QObject *parent) :
QItemDelegate(parent)



void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

QStyleOptionButton* button = m_btns.value(index);
if (!button)
button = new QStyleOptionButton();
button->rect = option.rect.adjusted(4, 4, -4, -4);
button->text = "X";
button->state |= QStyle::State_Enabled;

(const_cast<ButtonDelegate *>(this))->m_btns.insert(index, button);

painter->save();

if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());


painter->restore();
QApplication::style()->drawControl(QStyle::CE_PushButton, button, painter);



bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)

if (event->type() == QEvent::MouseButtonPress)

QMouseEvent* e =(QMouseEvent*)event;

if (option.rect.adjusted(4, 4, -4, -4).contains(e->x(), e->y()) && m_btns.contains(index))
m_btns.value(index)->state |= QStyle::State_Sunken;


if (event->type() == QEvent::MouseButtonRelease)
QMouseEvent* e =(QMouseEvent*)event;

if (option.rect.adjusted(4, 4, -4, -4).contains(e->x(), e->y()) && m_btns.contains(index))
m_btns.value(index)->state &= (~QStyle::State_Sunken);

QDialog *d = new QDialog();

d->setGeometry(0, 0, 200, 200);
d->move(QApplication::desktop()->screenGeometry().center() - d->rect().center());
d->show();


以上是关于qtableview的单元格怎么放一个button的主要内容,如果未能解决你的问题,请参考以下文章

Qt 中 QTableView 中如何设置某一单元格文本的颜色值,希望能贴出代码。

编辑 QTableView 单元格时设置初始文本

如何在 QTableView 中发出输入单元格和离开单元格的信号

PySide QTableView setData 用于多个单元格

QTableView 的单元格是空的,但标题显示

QTableView 并双击一个单元格