|
|
#include "FITKCopyrightDialog.h"
|
|
|
#include "ui_FITKCopyrightDialog.h"
|
|
|
#include <QTextBrowser>
|
|
|
#include <QFile>
|
|
|
#include <QDesktopServices>
|
|
|
|
|
|
/**
|
|
|
* 构造函数: 创建FITKCopyrigntInfoDlg对话框
|
|
|
*
|
|
|
* @param parent 父QWidget,默认为nullptr。指定了此对话框的父级窗口。
|
|
|
*/
|
|
|
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。
|
|
|
*
|
|
|
* 该函数首先检查_text指针是否为nullptr,如果是,则直接返回,
|
|
|
* 避免空指针解引用。接着清空当前的文本内容,然后设置新的文本。
|
|
|
*/
|
|
|
void FITKCopyrigntInfoDlg::setText(const QString & text)
|
|
|
{
|
|
|
if (_text == nullptr) return; // 检查指针是否为空,防止空指针异常
|
|
|
|
|
|
_text->clear(); // 清除当前文本框的内容
|
|
|
_text->setText(text); // 设置新的文本内容
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 构造函数:FITKCopyRightDialog
|
|
|
* 用于创建一个版权信息对话框。
|
|
|
*
|
|
|
* @param parent 父QWidget,默认为nullptr。指定了此对话框的父级窗口。
|
|
|
*/
|
|
|
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"开头,
|
|
|
* 如果不是,则不进行任何操作。最后,若满足条件,则使用QDesktopServices打开该URL。
|
|
|
*
|
|
|
* @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));
|
|
|
}
|
|
|
|