1.json文件
{
"shortcutInfos":
[
{
"shortcut":"F1",
"applyTo":"全局",
"command":"帮助"
},
{
"shortcut":"F2",
"applyTo":"全局",
"command":"信息"
},
{
"shortcut":"F3",
"applyTo":"全局",
"command":"配置"
},
{
"shortcut":"F4",
"applyTo":"全局",
"command":"窗口"
},
{
"shortcut":"F5",
"applyTo":"全局",
"command":"事件"
}
]
}
2.头文件 HelpDialog.h
#ifndef HELPDIALOG_H
#define HELPDIALOG_H
#include <QDialog>
namespace Ui {
class HelpDialog;
}
typedef struct _ShortcutInfo
{
QString shortcut;
QString applyTo;
QString command;
}ShortcutInfo;
class QStandardItemModel;
class HelpDialog : public QDialog
{
Q_OBJECT
public:
explicit HelpDialog(QWidget *parent = 0);
~HelpDialog();
void setModelContent();
void initShortcutInfoList();
Q_SLOT void on_closeBtn_clicked();
private:
Ui::HelpDialog *ui;
QStandardItemModel* mModel;
QList<ShortcutInfo> mShortcutInfoList;
};
#endif // HELPDIALOG_H
3.源文件 HelpDialog.cpp
#include "HelpDialog.h"
#include "ui_HelpDialog.h"
#include <QStandardItemModel>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
#include <QTextCodec>
HelpDialog::HelpDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::HelpDialog)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint);
//setWindowModality(Qt::WindowModal);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui->tableView->horizontalHeader()->setHighlightSections(false);
ui->tableView->verticalHeader()->hide();
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
//ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tableView->setFocusPolicy(Qt::NoFocus);
mModel = new QStandardItemModel(this);
QStringList headList;
headList << tr("Shortcut") << tr("Applies to:") << tr("Command");
mModel->setHorizontalHeaderLabels(headList);
setModelContent();
ui->tableView->setModel(mModel);
QString style = "QDialog{background-color:#1A1E30;border:1px solid #3D4C76;}"//
"QLabel{"
"color:#D0DFE6;"
"font-size:24px;"
"font-weight:bold;"
"}"
"QScrollBar:vertical "
"{ "
" background:#337E9AF8; "
" padding-top:1px; "
" padding-bottom:1px; "
" width:14px; "
" border-radius:0px; "
"} "
"QScrollBar:vertical:hover{ "
" background:#337E9AF8; "
" padding-top:1px; "
" padding-bottom:1px; "
" width:8px; "
" border-radius:0px; "
"} "
"QScrollBar::handle:vertical "
"{ "
" background:#997E9AF8; "
" border-radius:4px; "
" min-height:10px; "
" margin-left:3px; "
" margin-right:3px; "
"}"
"QScrollBar::handle:vertical:hover,QScrollBar::handle:vertical:pressed{ "
" background:#7E9AF8; "
"} "
"QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical{ "
" background:none; "
"} "
"QScrollBar::add-line:vertical,QScrollBar::sub-line:vertical{ "
" background:none; "
"} "
"QScrollBar:horizontal{ "
" background:rgba(29,37,64,160); "
" padding:0px; "
" border-radius:4px; "
" height:8px; "
"} "
"QScrollBar::handle:horizontal{ "
" background:#6C7FAB; "
" width:50px; "
" height:14px; "
" border-radius:4px; "
" padding:3px,0px,3px,0px; "
"} "
"QScrollBar::handle:horizontal:hover,QScrollBar::handle:horizontal:pressed{"
" background:rgba(126,154,248,160); "
"} "
"QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal{ "
" background:none; "
"} "
"QScrollBar::add-line:horizontal,QScrollBar::sub-line:horizontal{ "
" background:none; "
"} "
"QHeaderView::section { "
" background-color:#1A1E30; "
" color:#E8E8E8; "
" border-bottom:1px solid #3D4C76; "
" /*width:646px;*/ "
" height:36px; "
" font-size:18px; "
"} "
"QHeaderView::section:first { "
" border-top-left-radius:1px; "
" border-bottom-left-radius: 0px; "
" border-top-right-radius: 0px; "
" border-bottom-right-radius: 0px; "
" border-right:1px solid #252E4B; "
"} "
"QHeaderView::section:middle { "
" border-radius:0px; "
" border-bottom:1px solid #3D4C76; "
" border-right:1px solid #252E4B; "
" /*20283B;*/ "
"} "
"QHeaderView::section:last { "
" border-top-left-radius: 0px; "
" border-bottom-left-radius: 0px; "
" border-top-right-radius: 1px; "
" border-bottom-right-radius: 0px; "
"} "
"QTableView "
"{ "
" background:#1C223A; "
" color:#D0DFE6; "
" border:1px solid #3D4C76; "
" border-radius:4px; "
" font-size:18px; "
"} "
"QTableView::item{ "
" color:rgba(208,223,230,1); "
" height:28px; "
" border-bottom:1px solid rgba(61,76,118,0.6); "
"} "
"QTableView::item:selected "
"{ "
" background:#181B26; "
" color:#7E9AF8; "
"} "
"QTableView::item:hover "
"{ "
//" background:#252E4B; "
" color:rgba(208,223,230,1); "
"} "
"QTableView::item:selected:!active "
"{"
" color:#7E9AF8;"
"}";
this->setStyleSheet(style);
}
HelpDialog::~HelpDialog()
{
delete ui;
}
void HelpDialog::setModelContent()
{
initShortcutInfoList();
for (int i = 0; i < mShortcutInfoList.size(); i++)
{
mModel->setItem(i, 0, new QStandardItem(mShortcutInfoList.at(i).shortcut));
mModel->setItem(i, 1, new QStandardItem(mShortcutInfoList.at(i).applyTo));
mModel->setItem(i, 2, new QStandardItem(mShortcutInfoList.at(i).command));
}
}
void HelpDialog::initShortcutInfoList()
{
mShortcutInfoList.clear();
QFile file("./res/shortcutInfo_ch.json");
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "file open failed:" << file.errorString();
return;
}
QByteArray arr = file.readAll();
file.close();
QJsonParseError jsonError;
QJsonDocument doc = QJsonDocument::fromJson(arr, &jsonError);
if (jsonError.error == QJsonParseError::NoError)
{
if (!(doc.isEmpty() || doc.isNull()))
{
QJsonObject jsonObject = doc.object();
QJsonArray data = jsonObject.value("shortcutInfos").toArray();
for (int i = 0; i < data.size(); i++)
{
QJsonValue value = data.at(i);
QVariantMap ceilMap = value.toVariant().toMap();
ShortcutInfo info;
info.shortcut = ceilMap.value("shortcut").toString();
info.applyTo = ceilMap.value("applyTo").toString();
info.command = ceilMap.value("command").toString();
mShortcutInfoList.append(info);
}
}
}
}
void HelpDialog::on_closeBtn_clicked()
{
QDialog::reject();
}
4.应用代码
HelpDialog dlg;
dlg.exec();
附写json示例代码:
QFile file(path);
if (!file.open(QIODevice::WriteOnly))
{
LOGF(ERROR, "Failed to save dicom info file.");
return;
}
QJsonArray arr;
for (int i = 0; i < m_DicomResourceMap.size(); i++)
{
QJsonObject obj;
obj.insert("id", m_DicomResourceMap.value(i).id());
obj.insert("type", m_DicomResourceMap.value(i).type());
obj.insert("resourcePath", QString::fromStdString(m_DicomResourceMap.value(i).resource_path()));
obj.insert("thumbnailPath", QString::fromStdString(m_DicomResourceMap.value(i).thumbnail_path()));
obj.insert("creationTime", m_DicomResourceMap.value(i).creation_time());
obj.insert("fps", m_DicomResourceMap.value(i).fps());
obj.insert("frameCount", m_DicomResourceMap.value(i).frame_count());
obj.insert("grayscale", m_DicomResourceMap.value(i).grayscale());
obj.insert("contrastRatio", m_DicomResourceMap.value(i).contrast_ratio());
arr.insert(i, obj);
}
QJsonObject info;
info.insert("DsaResourceInfo", arr);
info.insert("LastId", m_LastId);
QJsonDocument jsonDoc;
jsonDoc.setObject(info);
file.write(jsonDoc.toJson());
file.close();