drug_sensitivity_reaction/bachistoricalrecords.h
jianbin.chang常健彬 ce734d1af1 厂家提供原始代码
2025-07-17 08:39:15 +08:00

342 lines
10 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef BACHISTORICALRECORDS_H
#define BACHISTORICALRECORDS_H
#include <QApplication>
#include <QWidget>
#include <QtSql>
#include <QDataWidgetMapper>
#include <QSqlTableModel>
#include <QTableView>
#include <QStyledItemDelegate>
#include "maxtu.h"
#include <QStyledItemDelegate>
#include <QPainter>
#include <QStyleOptionButton>
#include <QApplication>
#include<QMouseEvent>
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QImage>
#include <QFile>
#include <QTextDocument>
#include <QAxObject>
#include <QAxWidget>
#include <date.h>
#include<datee.h>
#include<QHBoxLayout>
#include<QScrollArea>
#include<QButtonGroup>
#include <QCheckBox>
#include <QHeaderView>
#include<QMouseEvent>
#include<QPainter>
class CheckBoxTableModel2 : public QSqlTableModel
{
Q_OBJECT
public:
CheckBoxTableModel2(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
: QSqlTableModel(parent, db) {}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (index.column() == 0 && role == Qt::CheckStateRole) {
// 返回复选框的状态
return m_checkStates.value(index.row(), Qt::Unchecked);
}
return QSqlTableModel::data(index, role);
}
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
{
if (index.column() == 0 && role == Qt::CheckStateRole) {
// 设置复选框的状态
m_checkStates[index.row()] = value.toBool() ? Qt::Checked : Qt::Unchecked;
emit dataChanged(index, index, {role});
return true;
}
return QSqlTableModel::setData(index, value, role);
}
Qt::ItemFlags flags(const QModelIndex &index) const override
{
if (index.column() == 0) {
// 使第一列可选中
return QSqlTableModel::flags(index) | Qt::ItemIsUserCheckable;
}
return QSqlTableModel::flags(index);
}
void setAllCheckState(Qt::CheckState state)
{
for (int i = 0; i < rowCount(); ++i) {
QModelIndex index = this->index(i, 0);
setData(index, state, Qt::CheckStateRole);
}
}
private:
QHash<int, Qt::CheckState> m_checkStates; // 存储复选框的状态
};
class CheckBoxHeader2 : public QHeaderView
{
Q_OBJECT
public:
CheckBoxHeader2(Qt::Orientation orientation, QWidget *parent = nullptr)
: QHeaderView(orientation, parent), m_checkState(Qt::Unchecked) {}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const override
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
if (logicalIndex == 0) {
QStyleOptionButton option;
option.initFrom(this);
option.rect = QRect(rect.left() + 3, rect.top() + 13, 16, 16);
option.state = QStyle::State_Enabled | QStyle::State_Active;
if (m_checkState == Qt::Checked) {
option.state |= QStyle::State_On;
} else if (m_checkState == Qt::Unchecked) {
option.state |= QStyle::State_Off;
} else {
option.state |= QStyle::State_NoChange;
}
style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter, this);
}
}
void mousePressEvent(QMouseEvent *event) override
{
int logicalIndex = logicalIndexAt(event->pos());
if (logicalIndex == 0) {
if (m_checkState == Qt::Checked) {
m_checkState = Qt::Unchecked;
} else {
m_checkState = Qt::Checked;
}
updateSection(0);
emit checkStateChanged(m_checkState);
}
QHeaderView::mousePressEvent(event);
}
signals:
void checkStateChanged(Qt::CheckState state);
private:
Qt::CheckState m_checkState;
};
class CenteredItemDelegate2 : 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 ButtonDelegate4 : 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;
}
// 重绘函数用于绘制按<E588B6><E68C89>?
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
if (index.column() == 6)
{
// 绘制删除按钮
QStyleOptionButton deleteButtonOption;
// deleteButtonOption.rect = option.rect;
deleteButtonOption.rect = option.rect;
deleteButtonOption.text = "删除";
deleteButtonOption.state = QStyle::State_Enabled;
deleteButtonOption.features |= QStyleOptionButton::Flat; // 设置为扁平样式,去除边框
QFontMetrics metrics(painter->font());
// 创建一个调色板对象
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);
}
}
// 处理鼠标事件判断按钮点<E992AE><E782B9>?
bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index)
{
if (index.column() == 6 && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
QRect cellRect = option.rect; // 使用更表意清晰的变量名表示单元格矩形区域
if (cellRect.contains(mouseEvent->pos()))
{
emit deleteButtonClicked(index);
return true;
}
}
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
};
class ClickToViewDelegate : public QStyledItemDelegate
{
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
// 不允许编辑返回nullptr
return nullptr;
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
if (index.column() == 2 || index.column() == 3) // 第三列列索引从0开始计<E5A78B><E8AEA1>?
{
QString text = "点击查看";
QStyleOptionButton buttonOption;
buttonOption.rect = option.rect;
buttonOption.text = text;
buttonOption.state = QStyle::State_Enabled;
buttonOption.features |= QStyleOptionButton::Flat; // 璁剧疆涓烘墎骞虫牱寮忥紝鍘婚櫎杈规
QFontMetrics metrics(painter->font());
// 创建一个调色板对象
QPalette buttonPalette2 = QApplication::style()->standardPalette();
buttonPalette2.setColor(QPalette::ButtonText, QColor(0, 170, 255));
// 将调色板应用到按钮样式选项中
buttonOption.palette = buttonPalette2;
QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter);
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
}
};
namespace Ui {
class bachistoricalrecords;
}
class bachistoricalrecords : public QWidget
{
Q_OBJECT
public:
explicit bachistoricalrecords(QWidget *parent = nullptr);
~bachistoricalrecords();
void getname();
public slots:
void getshuaxin();
private slots:
void onCellClicked(const QModelIndex &index);
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_4_clicked();
void on_pushButton_6_clicked();
void shanchu(const QModelIndex& index);
void on_toolButton_clicked();
void on_pushButton_3_clicked();
void on_pushButton_5_clicked();
void getkaishi(QString str);
void getkaishii(QString str);
void onPageButtonClicked(int id);
void on_pushButton_10_clicked();
void on_pushButton_9_clicked();
void on_pushButton_11_clicked();
void onTableViewClicked(const QModelIndex &index);
void onDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void onHeaderCheckStateChanged(Qt::CheckState state);
private:
CheckBoxHeader2 *header;
CheckBoxTableModel2* model;
QSqlQueryModel *currentModel; // 新增成员变量
void updateButtons();
int currentPage=0;
int totalPages;
int recordsPerPage=18;
void updatePage();
QButtonGroup *buttonGroup;
QHBoxLayout *buttonLayout;
QWidget mask_window;
void handleErrorAndRelease(QAxObject *workbook, QAxObject *workbooks, QAxWidget *excel);
Ui::bachistoricalrecords *ui;
QSqlQuery query;
void shuaxin();
QItemSelectionModel *theSelection; //选择模型
QDataWidgetMapper *dataMapper; //数据映射
maxtu *m_maxtu;
ClickToViewDelegate delegate;
ButtonDelegate4* delegate2;
date *m_date;
datee *m_datee;
signals:
void yuan(QPixmap p);
void jie(QPixmap p);
void fanhui();
void lujing(QString str1,QString str2);
void guan();
void tuichu2();//历史记录的退出
};
#endif // BACHISTORICALRECORDS_H