#ifndef SETUPUERS_H #define SETUPUERS_H #include #include #include #include #include #include #include #include #include #include #include "addusers.h" #include #include #include #include #include #include #include #include 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(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