/** * @file FITKTableWidget.h * @brief * @author YanZhiHui(chanyuantiandao@126.com) * @date 2024-10-21 */ #ifndef FITKTableWidget_H_ #define FITKTableWidget_H_ #include #include #include #include "FITKWidgetAPI.h" namespace Comp { /** * @brief 自定义表格组件类 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ class FITKWidgetAPI FITKTableWidget : public QTableWidget { Q_OBJECT public: /** * @brief 构造函数 * @param parent 父对象 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ explicit FITKTableWidget(QWidget *parent = nullptr); /** * @brief 析构函数 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ ~FITKTableWidget(); /** * @brief 设置按回车键添加一行 * @param b 是否添加 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ void setAppendLineByEnterPressed(bool b); /** * @brief 设置表格是否是单行模式(默认为false) * @param[i] isAlone true:开启 false:关闭 * @author BaGuijun (baguijun@163.com) * @date 2024-06-07 */ void setIsAloneRow(bool isAlone); /** * @brief 表格增加一行 * @param[in] rowNum 增加行的索引 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-08-14 */ void addTableRowAndItem(int rowNum); signals: /** * @brief 单元格按回车键被按下 * @param index 单元格索引 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ void cellEnterPressed(QModelIndex index); public slots: /** * @brief 右键菜单响应槽函数 * @param[in] 点击位置 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void customContextMenuRequestedSlot(QPoint); /** * @brief 右键菜单“剪切”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void cutActionSlot(); /** * @brief 右键菜单“拷贝”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void copyActionSlot(); /** * @brief 右键菜单“粘贴”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void pasteActionSlot(); /** * @brief 右键菜单“在之前插入”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void insertBeforeActionSlot(); /** * @brief 右键菜单“在之后插入”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void insertAfterActionSlot(); /** * @brief 右键菜单“删除行”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void deleteRowActionSlot(); /** * @brief 右键菜单“清空内容”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void clearContentsActionSlot(); /** * @brief 右键菜单“清理表格”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void clearTableActionSlot(); /** * @brief 右键菜单“读取文件”响应槽函数 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-07-26 */ void readFileActionSlot(); protected: /** * @brief 重写按键事件 * @param event 事件 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ virtual void keyPressEvent(QKeyEvent *event) override; /** * @brief 重写按键释放事件 * @param event 事件 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ virtual void keyReleaseEvent(QKeyEvent *event) override; /** * @brief 重写方法,屏蔽编辑框的右键菜单 * @author YanZhiHui (chanyuantiandao@126.com) * @data 2024-05-14 */ bool edit(const QModelIndex &index, EditTrigger trigger = QAbstractItemView::SelectedClicked, QEvent *event = nullptr) override; private: /** * @brief 按回车键添加一行 * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-04-22 */ bool _isAppendLineByEnterPressed{ false }; /** * @brief 右键菜单 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-08-14 */ QMenu *_tableWidgetContextMenu{}; /** * @brief 剪切板对象 * @author yanzhihui (chanyuantiandao@126.com) * @date 2023-08-14 */ QClipboard *_clipboard{}; /** * @brief 是否为单行模式标记符 * @author BaGuijun (baguijun@163.com) * @date 2024-04-22 */ bool _isAloneRow = false; }; } #endif