QT의 에이전트 Delegate 독학
3017 단어 QT
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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
qt 초급 오류: 헤더 파일에서 정의, cpp가 실행되지 않았습니다.문제 :-1: error: symbol(s) not found for architecture x86_64 :-1: error: linker command failed with exit code 1 (use -v to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.