QStyledItemDelegate派生类小例

2024-05-03 04:38

本文主要是介绍QStyledItemDelegate派生类小例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QStyledItemDelegate派生类小例

///spinboxdelegate.h/

#ifndef SPINBOXDELEGATE_H
#define SPINBOXDELEGATE_H
 
#include <QWidget>
#include <QStyledItemDelegate>
#include <QModelIndex>
#include <QObject>
#include <QSize>
#include <QSpinBox>
 
class SpinBoxDelegate : public QStyledItemDelegate
{
    Q_OBJECT
 
public:
    SpinBoxDelegate(QObject *parent = 0);
    ~SpinBoxDelegate();
 
    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
 
/spinboxdelegate.cpp/// 

#include "spinboxdelegate.h"
 
SpinBoxDelegate::SpinBoxDelegate(QObject *parent)
    : QStyledItemDelegate(parent)
{
}
 
SpinBoxDelegate::~SpinBoxDelegate()
{
 
}
QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                                       const QModelIndex &index) const{
    QSpinBox *editor = new QSpinBox(parent);
    editor->setMinimum(0);
    editor->setMaximum(100);
    return editor;
}
void SpinBoxDelegate::setEditorData(QWidget *editor,
                                    const QModelIndex &index) const{
    int value = index.model()->data(index,Qt::EditRole).toInt();
    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
    spinBox->setValue(value);
}
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
                                   const QModelIndex &index) const{
    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
    spinBox->interpretText();
    int value = spinBox->value();
    model->setData(index, value, Qt::EditRole);
}
 
void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem *option,
                                           const QModelIndex &index) const{
    editor->setGeometry(option->rect);
}
 
/main.cpp/// 

#include "spinboxdelegate.h"
#include <QApplication>
#include <QStandardItemModel>
#include <QTableView>
#include <QModelIndex>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QStandardItemModel model(4,2);
    QTableView tableView;
    tableView.setModel(&model); //为视图设置模型
 
    SpinBoxDelegate spinBox_dg;
    tableView.setItemDelegate(&spinBox_dg); //为视图设置项委托
 
    for(int row = 0; row < 4; ++row){
        for(int column = 0; column < 2; ++column){
            QModelIndex index = model.index(row,column,QModelIndex());
            model.setData( index,QVariant((row + 1) * (column + 1)) );
        }
    }
    tableView.setWindowTitle(QObject::tr("Spin Box Delegate"));
    tableView.show();
    return a.exec();
}
 

运行结果:







这篇关于QStyledItemDelegate派生类小例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/955844

相关文章

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端,我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner = owner;this.currency = currency;this.pin = pin;}}const ITshare = new Account('ITshare', 'EUR',

C++笔记之在基类和派生类之间进行类型转换的所有方法

C++笔记之在基类和派生类之间进行类型转换的所有方法 code review! 文章目录 C++笔记之在基类和派生类之间进行类型转换的所有方法1.dynamic_cast和std::static_pointer_cast在基类和派生类之间的转换使用场景下的区别1.1.`dynamic_cast`1.2.`std::static_pointer_cast`1.3.总结 2.dynamic_c

C#下在派生类中引发基类事件的方法与示例

文章目录 基类事件在派生类中的定义及触发方式基类事件的传播机制示例总结 在面向对象编程中,继承是代码复用的一种重要方式。C#作为一种面向对象的编程语言,允许派生类继承基类的属性和方法。基类定义了一系列共有的属性和行为,而派生类则可以在基类的基础上添加新的特性或重写基类的方法。事件作为一种特殊的成员,也可以在基类中被定义,并在派生类中被触发和使用。 基类事件在派生类中

对派生类指针使用C风格的强制类型转换为基类指针

以下来自语言大模型的回答: 值可能发生改变 当对派生类指针使用C风格的强制类型转换成基类指针时,指针的值可能会发生改变。这主要是由于多重继承和虚继承的存在。以下是几个关键点解释: 单继承情况下: 在单继承的情况下,派生类指针转换为基类指针通常不会改变指针的值。基类子对象通常位于派生类对象的开始位置。多重继承情况下: 当涉及多重继承时,派生类可能包含多个基类子对象。这时,指向派生类的指针转换为

C++中赋值运算符能不能被派生类继承

如果基类中重写了赋值运算符重载函数,派生类中没有重写的话,那么当用派生类调用赋值运算符时,基类的运算符重载函数会被调用,而且派生类的成员也会进行赋值。       如果基类中重写了赋值运算符重载函数,派生类中也重写了的话,那么如果派生类的赋值运算符重载函数里没有显示的调用的基类的赋值运算符重载函数,那么基类的赋值运算符重载函数是不会被调用的,当派生类对象调用赋值运算符重载函数时,基类部分的值是

10_3、C++继承与派生:派生类成员访问

派生类成员访问 作用域分辨符虚基类概念及用法虚基类派生类的构造函数 赋值兼容规则 作用域分辨符 如果派生类中存在和基类中完全相同的函数,将发生同名覆盖。如果在派生类中存在一个和基类某数据成员同名的数据成员,或者和基类某成员函数的名称和参数表都相同的成员函数,则派生类中的新成员就覆盖了基类成员,不管是在派生类内还是在派生类外部只能通过成员名访问到派生类的成员,而访问不到基类成员。

(P32)继承:多重继承 ,虚继承与虚基类 ,虚基类及其派生类构造函数

文章目录 1.多重继承2.虚继承与虚基类3.虚基类及其派生类构造函数 1.多重继承 单重继承:一个派生类最多只能有一个基类多重继承:一个派生类可以有多个基类 (1)派生类同时继承多个基类的成员,更好的软件重用 (2)可能会有大量的二义性,多个基类中可能包含同名变量或函数 (3)用法 class 类名: 继承方式 基类, 继承方式 基类2,...{...}; 多重继承中解

(P31)继承:转换与继承 ,派生类到基类的转换 ,基类到派生类的转换

文章目录 1.转换与继承2.派生类到基类的转换3.基类到派生类的转换 1.转换与继承 派生类对象也是基类对象。这意味着,在使用基类的地方可以用派生类来代替。 eg:教师类继承至人类,那么教师也是人 2.派生类到基类的转换 派生类和基类谁大?基类比派生类的适用集合更大,派生类是基类的具体化当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型upcasting

C++基类与派生类

1.派生类的定义         派生类语法如下: class <派生类名> : <继承方式> <基类名>{private:派生类新增成员;protected:派生类新增成员;public:派生类新增成员;}; 说明: (1)class:类声明的关键字; (2)派生类名:新(派生)类名; (3)继承方式:指出继承的方式是什么。继承方式包含以下3种。 • public(公有继承方式

派生类规则

派生类: 1. 声明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象     class base{         //function     }     class derive:private base{         //function     }     void main(){