193 lines
6.0 KiB
C
Raw Permalink Normal View History

2025-07-17 08:39:15 +08:00
#ifndef SETUPUERS_H
#define SETUPUERS_H
#include <QWidget>
#include <QtSql>
#include <QDataWidgetMapper>
#include <QSqlTableModel>
#include <QTableView>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QPushButton>
#include <QMessageBox>
#include<QLineEdit>
#include "addusers.h"
#include<date.h>
#include<datee.h>
#include <QStyledItemDelegate>
#include <QPushButton>
#include <QPainter>
#include <QApplication>
#include <QMouseEvent>
#include <QModelIndex>
class CenteredItemDelegate5 : public QStyledItemDelegate {
public:
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override {
QWidget* editor = QStyledItemDelegate::createEditor(parent, option, index);
if (editor) {
editor->setStyleSheet("text-align: center;");
}
return editor;
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override {
QStyleOptionViewItem opt = option;
opt.displayAlignment = Qt::AlignHCenter | Qt::AlignVCenter;
QStyledItemDelegate::paint(painter, opt, index);
}
};
class ButtonDelegate : public QStyledItemDelegate
{
Q_OBJECT
signals:
void editButtonClicked(const QModelIndex& index) const;
void deleteButtonClicked(const QModelIndex& index) const;
public:
using QStyledItemDelegate::QStyledItemDelegate;
// 创建编辑器这里我们不需要编辑器返回nullptr
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
return nullptr;
}
// 重绘函数,用于绘制按钮
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
if (index.column() == 5) // 判断是否为第五列
{
// 绘制编辑按钮
// QStyleOptionButton editButtonOption;
// editButtonOption.rect = option.rect;
// editButtonOption.rect.setWidth(editButtonOption.rect.width() * 0.4);
// editButtonOption.text = "编辑";
// editButtonOption.state = QStyle::State_Enabled;
// editButtonOption.features |= QStyleOptionButton::Flat; // 设置为扁平样式,去除边框
// QApplication::style()->drawControl(QStyle::CE_PushButton, &editButtonOption, painter);
// 绘制删除按钮
QStyleOptionButton deleteButtonOption;
deleteButtonOption.rect = option.rect;
// deleteButtonOption.rect = option.rect;
// deleteButtonOption.rect.setX(deleteButtonOption.rect.x() + deleteButtonOption.rect.width() * 0.4);
// deleteButtonOption.rect.setWidth(deleteButtonOption.rect.width() * 0.6);
deleteButtonOption.text = "删除";
deleteButtonOption.state = QStyle::State_Enabled;
deleteButtonOption.features |= QStyleOptionButton::Flat; // 设置为扁平样式,去除边框
\
// 创建一个调色板对象
QPalette buttonPalette = QApplication::style()->standardPalette();
// 设置文本颜色为红色
buttonPalette.setColor(QPalette::ButtonText, Qt::red);
// 将调色板应用到按钮样式选项中
deleteButtonOption.palette = buttonPalette;
QApplication::style()->drawControl(QStyle::CE_PushButton, &deleteButtonOption, painter);
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
}
// 处理鼠标事件,判断按钮点击
bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index)
{
if (index.column() == 5 && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
// 判断是否点击编辑按钮区域
// QRect editRect = option.rect;
// editRect.setWidth(editRect.width() * 0.4);
// if (editRect.contains(mouseEvent->pos()))
// {
// emit editButtonClicked(index);
// return true;
// }
// 判断是否点击删除按钮区域
// QRect deleteRect = option.rect;
// deleteRect.setX(deleteRect.x() + deleteRect.width() * 0.4);
// deleteRect.setWidth(deleteRect.width() * 0.6);
// if (deleteRect.contains(mouseEvent->pos()))
// {
// emit deleteButtonClicked(index);
// return true;
// }
QRect cellRect = option.rect; // 使用更表意清晰的变量名表示单元格矩形区域
if (cellRect.contains(mouseEvent->pos()))
{
emit deleteButtonClicked(index);
return true;
}
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
};
namespace Ui {
class setupuers;
}
class setupuers : public QWidget
{
Q_OBJECT
public:
explicit setupuers(QWidget *parent = nullptr);
~setupuers();
QSqlQuery query;
void getxinzeng();
private slots:
// 新增槽函数,用于处理编辑按钮点击事件
void on_pushButton_clicked();
void on_pushButton_6_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void bianji(const QModelIndex& index);
void shanchu(const QModelIndex& index);
void on_pushButton_5_clicked();
void on_pushButton_7_clicked();
void getkaishi(QString str);
void getkaishii(QString str);
private:
date *m_date;
datee *m_datee;
void getshui();
QString gettime();
QSqlTableModel* model;
QSqlTableModel* model2;
QWidget mask_window;
void addtable();
addusers * m_addusers;
ButtonDelegate* delegate = new ButtonDelegate;
//MyTableView* tableView = new MyTableView;
Ui::setupuers *ui;
signals:
void renyuan();
};
#endif // SETUPUERS_H