deepin/uos 自研应用添加帮助手册

deepin/uos系统,为自己开发的应用添加帮助手册,支持全局快捷键F1 启动帮助手册显示应用介绍.
一 按F1启动帮助手册逻辑:

DTK封装了Qt::Key_F1快捷键,用户按F1时,判断此应用是不是存在帮助手册,如果存在即会调用deepin-manual的DBus接口com.deepin.Manual.Open,启动帮助手册应用,显示帮助文档;

DTK源码:

void DMainWindowPrivate::init()if (!help) {
        help = new QShortcut(QKeySequence(Qt::Key_F1), q);
        QObject::connect(help, &QShortcut::activated,
        q, [ = ]() {
            DApplication *dapp = qobject_cast<DApplication *>(qApp);
            if (dapp) {
                dapp->handleHelpAction();
            }
        });
    }
}
 该函数在用户点击窗口标题栏的帮助按钮时触发。
  默认实现为打开当前程序的帮助手册,子类可以重现实现此函数以覆盖其默认行为。
 */
void DApplication::handleHelpAction()
{
    D_D(DApplication);
    if (customHandler()) {
        d->appHandler->handleHelpAction();
        return;
    }
    if (!DApplicationPrivate::isUserManualExists()) {
        return;
    }
#ifdef Q_OS_LINUX
    QString appid = applicationName();

    // new interface use applicationName as id
    QDBusInterface manual("com.deepin.Manual.Open",
                          "/com/deepin/Manual/Open", 
                          "com.deepin.Manual.Open");
    QDBusReply<void> reply = manual.call("ShowManual", appid);
    if (reply.isValid())  {
        qDebug() << "call com.deepin.Manual.Open success";
        return;
    }
    qDebug() << "call com.deepin.Manual.Open failed" << reply.error();
    // fallback to old interface
    QProcess::startDetached("dman", QStringList() << appid);
#else
    qWarning() << "not support dman now";
#endif
}

判断应用是否有帮助手册主要是以下方法,满足以下两个条件,自己写的demo就可以按F1启动帮助手册啦...

bool DApplicationPrivate::isUserManualExists()
{
#ifdef Q_OS_LINUX
    auto loadManualFromLocalFile = [=]() -> bool {
        const QString appName = qApp->applicationName();
        //判断帮助手册应用是否存在
        bool dmanAppExists = QFile::exists("/usr/bin/dman");
        bool dmanDataExists = false;
        // search all subdirectories
        
        QString strManualPath = "/usr/share/deepin-manual";
        QDirIterator it(strManualPath, QDirIterator::Subdirectories);
        while (it.hasNext()) {
            QFileInfo file(it.next());
			//判断帮助文档是否存在
            if (file.isDir() && file.fileName().contains(appName, Qt::CaseInsensitive)) {

                dmanDataExists = true;
                break;
            }

            if (file.isDir())
                continue;
        }
        return  dmanAppExists && dmanDataExists;
    };
二 使用方法
  1. 创建DTK项目
DWIDGET_USE_NAMESPACE
DCORE_USE_NAMESPACE
int main(int argc, char *argv[])
{
    DApplication a(argc, argv);
    mainwindow w;
    w.setMinimumSize(1000, 500);
    w.show();

    Dtk::Widget::moveToCenter(&w);

    return a.exec();
}
  1. 设置应用名属性
//设置程序单例模式
    if (!a.setSingleInstance("dtk-看看")) {
        return 0;
    }
    a.setAttribute(Qt::AA_UseHighDpiPixmaps);
    //设置主题
    a.setTheme("light");
    a.setOrganizationName("deepin");
    //应用名称,此属性为帮助手册关键属性,应用名必须与/usr/share/deepin/deepin-manual目录中的保持一致
    a.setApplicationName("deepin-dtk-demo");
    a.setApplicationVersion("1.0");
    a.setProductIcon(QIcon(":/images/logo.svg"));
    a.setProductName("deepin-dtk-demo"); //关于
    a.setApplicationDescription("This is a dtk template application.");
    //不显示鸣谢链接
    a.setApplicationAcknowledgementVisible(false);
    //设置程序授权
    a.setApplicationLicense("GPLv3");
    // 设置终端日志和日志文件处理
    DLogManager::registerConsoleAppender();
    DLogManager::registerFileAppender();

    //主题记忆
    DApplicationSettings savetheme;
  1. 创建帮助手册目录
cd  /usr/share/deepin-manual/manual-assets/application
mkdir deepin-dtk-demo
  1. 帮助文档资源目录结构跟其它系统应用保持一致;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
·1.【原创资源】内容简介: --------------------------------------------------------------- 这是一个压缩包,里面是国际赛数模训练时,做无线电信道分配所用的资料 --------------------------------------------------------------- ·2.资源使用方法 microsoft word Adobe pdf 浏览 --------------------------------------------------------------- ·3.文件组成形式 格式:doc pdf文件 /**********************************************/ 文件名如下: (Toolkit的具体使用方法)SEU-3D-TOOLKIT使用手册.pdf (三位老队员的毕业设计,可供参考).zip (各个队伍可以此源码作为基础,阅读代码后进行修改使这个基础队伍变强从而参加比赛)seu-base.tar.gz (基础源码的简要介绍)presentation.pdf (更新版本维护了调试工具toolkit,各个队伍可以使用调试工具,更快更专业地调试你们的代码)seu-base-toolkit-update.tar.bz2 (测试队伍可以用来和自己的队伍进行比赛,测试自己开发的队伍的能力到了什么程度。 )teams_for_test.zip (老队员王巍的代码阅读笔记,可供参考。)SEU-3Architecture.doc (这个是server的安装包,参考新手上路进行安装 rcss3d-suse-install-11.X.tar.gz (这个是server的配置文件,如何使用请参阅新手上路)rcssserver3D.rb (这个是开始比赛之前的配置,同样请参考新手上路进行配置agentdb.list 23D introduction by xuyuan v0.4.pdf 3d_rules.pdf FAQ FAQ~ Linux菜鸟教程 国际足球比赛规则.pdf 文件说明.pdf 新手上路.pdf 通知.doc /**********************************************/ --------------------------------------------------------------- ·4. wogeguaiguai的附言: 1.我的其他数学建模资源也欢迎您下载,都是非常好的准备比赛要用的资料。俺一年的搜索资源,同学们一朝即可获得! 2.下载本文件后,您可以获得所有信息,不必再零散下载,给您带来很大的方便。 3.10个资源分,绝对物超所值。评论后,您就可以获得11个资源分,欢迎您评论! --------------------------------------------------------------- ·5.如有问题,请在此留言,谢谢。 --------------------------------------------------------------- ·6.上传时间 2010-2-24-afternoon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值