You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.9 KiB
C++

#include "FITKCopyrightDialog.h"
#include "ui_FITKCopyrightDialog.h"
#include <QTextBrowser>
#include <QFile>
#include <QDesktopServices>
/**
* : FITKCopyrigntInfoDlg
*
* @param parent QWidgetnullptr
*/
FITKCopyrigntInfoDlg::FITKCopyrigntInfoDlg(QWidget* parent /*= nullptr*/)
{
// 创建并设置网格布局
auto gridLayout = new QGridLayout(this);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
// 创建文本浏览器并添加到布局中
_text = new QTextBrowser(this);
gridLayout->addWidget(_text, 0, 0, 1, 1);
// 设置文本浏览器作为对话框的主要内容
}
/**
*
*
* @param text QString
*
* _textnullptr
*
*/
void FITKCopyrigntInfoDlg::setText(const QString & text)
{
if (_text == nullptr) return; // 检查指针是否为空,防止空指针异常
_text->clear(); // 清除当前文本框的内容
_text->setText(text); // 设置新的文本内容
}
/**
* FITKCopyRightDialog
*
*
* @param parent QWidgetnullptr
*/
FITKCopyRightDialog::FITKCopyRightDialog(QWidget* parent /*= nullptr*/)
:QDialog(parent)
{
// 初始化UI界面
_ui = new Ui::DlgCopyright;
_ui->setupUi(this);
// 设置表格头部的自适应拉伸模式
_ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 遍历表格,设置单元格文本的居中对齐
const int nR = _ui->tableWidget->rowCount();
const int nC = _ui->tableWidget->columnCount();
for (int i = 0; i < nR; i++)
{
for (int j = 0; j < nC; j++)
{
_ui->tableWidget->item(i, j)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
}
}
// 连接表格单元格双击事件到相应槽
connect(_ui->tableWidget, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(onTableItemClickedSlot(int, int)));
// 禁止表格的编辑触发器
_ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
_ui->tabWidget->setCurrentIndex(0);
}
FITKCopyRightDialog::~FITKCopyRightDialog()
{
if (_ui) delete _ui;
}
void FITKCopyRightDialog::onTableItemClickedSlot(int row, int col)
{
if (col == 1)
{
this->browseLicense(row);
}
else if (col == 3)
{
this->openUrl(row, col);
}
return;
}
/**
*
*
* @param row
*
* 使
*
*/
void FITKCopyRightDialog::browseLicense(int row)
{
QTableWidgetItem* item = _ui->tableWidget->item(row, 0); // 尝试获取指定行的首项
if (item == nullptr) return; // 如果项不存在,则直接返回
QString text = item->text(); // 获取项的文本
QString file = QString(":/License/License/%1.txt").arg(text); // 生成许可证文件的路径,位于资源文件
QFile f(file);
if (!f.exists()) return; // 如果文件不存在,直接返回
if(!f.open(QIODevice::ReadOnly)) return; // 如果无法以只读模式打开文件,直接返回
QString alltext = f.readAll(); // 读取文件的全部内容
f.close(); // 关闭文件
FITKCopyrigntInfoDlg dlg(this); // 创建显示许可证信息的对话框
dlg.setText(alltext); // 设置对话框中显示的内容为文件内容
dlg.setWindowTitle(text); // 设置对话框的标题为文件名
dlg.exec(); // 显示对话框并等待用户交互
}
/**
* @brief URL
*
* "http"
* 使QDesktopServicesURL
*
* @param row
* @param col
*/
void FITKCopyRightDialog::openUrl(int row, int col)
{
// 尝试获取指定位置的单元格项
QTableWidgetItem* item = _ui->tableWidget->item(row, col);
if (item == nullptr) return; // 如果单元格项不存在,则直接返回
QString text = item->text(); // 获取单元格项的文本内容
if (!text.startsWith("http")) return; // 如果文本不以"http"开头,则不进行后续操作
// 使用QDesktopServices打开URL
QDesktopServices::openUrl(QUrl(text));
}