QT의 에이전트 Delegate 독학

3017 단어 QT
createEditor
setEditorData
setModelData
이 세 함수는 쓸 함수다.그러나 F1을 누르면 도움말 문서로 이동할 수 없습니다. 이것은 버그라고 할 수 없습니다.
다음 코드는 한 표에 spin 컨트롤을 추가하는 것입니다
spinDelegate 헤더 파일:
4
#ifndef SPINBOXDELEGATE_H
#define SPINBOXDELEGATE_H
#include 
#include 
#include 


class SpinBoxDelegate : public QItemDelegate
{
    Q_OBJECT

public:
    SpinBoxDelegate(QObject *parent = 0);

    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;

    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;

    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
#endif // SPINBOXDELEGATE_H
cpp 파일
#include "spinboxdelegate.h"
#include 
#include 

SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
    : QItemDelegate(parent)
{

}
QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QSpinBox *editor = new QSpinBox(parent);
    editor->setRange(0,10000);
    editor->installEventFilter(const_cast(this));
    return editor;
}

void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    int value = index.model()->data(index, Qt::EditRole).toInt();

    QSpinBox *spinBox = static_cast(editor);
    spinBox->setValue(value);
}

void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const
{
    QSpinBox *box = static_cast(editor);
    int value = box->value();

    model->setData(index,value);
}

void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,
    const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
    editor->setGeometry(option.rect); // option.rect           ,                 
}

물론 창에 설정을 하는 것을 잊지 마세요
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QStandardItemModel *tableModel=new QStandardItemModel(4,4,this);

    SpinBoxDelegate *spinDelegate=new SpinBoxDelegate;

    tableModel->setHeaderData(0,Qt::Horizontal,tr("  "));
    tableModel->setHeaderData(1,Qt::Horizontal,"  ");
    tableModel->setHeaderData(2,Qt::Horizontal," ");
    tableModel->setHeaderData(4,Qt::Horizontal,"  ");
    QTableView *tabletView=new QTableView;
    tabletView->setModel(tableModel);
    tabletView->setItemDelegateForColumn(3,spinDelegate);
    QHBoxLayout *mainLayout=new QHBoxLayout(this);
    mainLayout->addWidget(tabletView);
}

좋은 웹페이지 즐겨찾기