概述
QTableView QStandardItemModel QStyledItemDelegate综合应用,其中已经完成以下工作:
1、在表格中添加自定义comboBox,且支持初始化时自定义Item;
2、在表格中添加自定义spinBox;
3、在表格中自定义progressBar(其中,disable一行后,progressBar没有变成灰色,后期待优化);
4、在表格中自定义按键,且初始化时可以自定义按键数量、按键名称、按键间距等;
待完成以下工作:
1、自定义表格标题格式;
2、自定义checkBox输入;
3、自定义lineEdit,需要支持密文显示、ip地址筛选;
4、自定义icon;
5、自定义颜色输入;
6、自定义日期输入;
7、其他好玩的待完成的功能
自定义pushButton头文件
#ifndef BUTTONDELEGATE_H
#define BUTTONDELEGATE_H
#include <QStyledItemDelegate>
#include <QObject>
class ButtonDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit ButtonDelegate(QObject *parent = nullptr, QStringList buttonNames = {
"我是按键"});
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option,
const QModelIndex &index) override;
public:
void emitClicked()const;
mutable int abc;
signals:
void clicked(QString buttonName,const QModelIndex &index) const;
private:
int mButtonState;
int mButtonNum;
int mButtonSpace;
QPoint mMousePoint;
QStringList mButtonNames;
};
#endif // BUTTONDELEGATE_H
#######################################################
自定义pushButton源文件
#include "buttondelegate.h"
#include "qapplication.h"
#include <QPushButton>
#include <QMouseEvent>
ButtonDelegate::ButtonDelegate(QObject *parent, QStringList buttonNames)
: QStyledItemDelegate{
parent}
{
mButtonNames = buttonNames;
mButtonNum = buttonNames.count();
mButtonSpace = 1;
}
//paint函数是const类型的函数,不能改变成员变量的值,但能改变mutable修饰的成员变量的值
void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
Q_UNUSED(index)
QStyleOptionViewItem optionItem(option);
// initStyleOption(&optionItem,index);
// if(option.state.testFlag(QStyle::State_HasFocus))
// viewOption.state = viewOption.state^QStyle::State_HasFocus;
// QStyledItemDelegate::paint(painter,viewOption,index);
// initStyleOption(&optionItem,index);
//根据按钮数量,确定按键长宽及坐标
int buttonWidth = (optionItem.rect.width()-(mButtonNum+1)*mButtonSpace)/mButtonNum;
int buttonHeight = optionItem.rect.height() - 2*mButtonSpace;
int buttonLeft = optionItem.rect.left() + mButtonSpace;
int buttonTop = optionItem.rect.top() + mButtonSpace;
for(int i = 0; i < mButtonNum; i++){
QStyleOptionButton styleButton; //绘制按键
styleButton.rect = QRect(buttonLeft,buttonTop,buttonWidth,buttonHeight);
buttonLeft += buttonWidth + mButtonSpace;
styleButton.text = mButtonNames.at(i);
styleButton.state = QStyle::State_Enabled; //设置按键状态
if((mButtonState == 0)&&(styleButton.rect.contains(mMousePoint))){
styleButton.state |=