真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)

QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)

一、QtCreator菜單欄簡介

1、QtCreator菜單簡介

QtCreator菜單欄如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
QtCreator默認(rèn)菜單包括“文件”、“編輯”、“工具”、“窗體”、“幫助”?!皹?gòu)建”、“調(diào)試”、“分析”由插件提供,不是QtCreator的默認(rèn)菜單。在“幫助”菜單中的“關(guān)于插件”對話框中將所有可以取消的插件取消后重啟QtCreator,得到QtCreator默認(rèn)菜單如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供河間網(wǎng)站建設(shè)、河間做網(wǎng)站、河間網(wǎng)站設(shè)計(jì)、河間網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、河間企業(yè)網(wǎng)站模板建站服務(wù),10余年河間做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

2、Core::ActionManager簡介

QtCreator主程序僅僅是一個插件加載器。QtCreator所提供的所有功能都是通過插件實(shí)現(xiàn)的。QtCreator最主要的一個插件叫做Core插件。如果沒有Core插件,QtCreator將沒有插件加載功能。
Core插件的關(guān)鍵組件是ActionManager。ActionManager的作用是注冊菜單、菜單項(xiàng)以及鍵盤快捷鍵。如果想要添加新的菜單或菜單項(xiàng),就需要使用ActionManager。
為了訪問ActionManager,可以使用下面的代碼:

#include 
#include 
Core::ActionManager* am = Core::ICore::instance()->actionManager();

3、Core::ActionContainer簡介

ActionContianer表示QtCreator中的菜單或者菜單欄。通常不會直接創(chuàng)建ActionContainer的實(shí)例,而通過ActionManager::createMenu()、ActionManager::createMenuBar()函數(shù)進(jìn)行訪問。
QtCreator每一個默認(rèn)菜單都關(guān)聯(lián)一個ActionContainer對象。給定一個菜單,獲取其關(guān)聯(lián)的ActionContainer對象,可以使用下面的代碼:

#include 
#include 
#include 
#include 

Core::ActionManager* am = Core::ICore::instance()->actionManager();
Core::ActionContainer* ac = am->actionContainer(ID);

QtCreator每個菜單的ID如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
每個ID都是Core命名空間中的靜態(tài)const char *常量,$$QT_CREATOR_ROOT/src/plugins/coreplugin/coreconstants.h文件中定義了這些常量。
如果想要訪問“Help”菜單,可以使用如下的代碼:

#include 
#include 
#include 
#include 

Core::ActionManager* am = Core::ICore::instance()->actionManager();
Core::ActionContainer* ac =     am->actionContainer( Core::Constants::M_HELP );

二、添加菜單項(xiàng)

如果將DoNothing插件添加到“Help”菜單,增加為“About DoNothing”菜單項(xiàng)。
DoNothingPlugin.cpp文件修改如下:

#include 
#include 
#include 
#include 
#include 

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    Core::ActionManager* am = Core::ICore::instance()->actionManager();
    Core::ActionContainer* ac = am->actionContainer(Core::Constants::M_HELP);
    QAction* aboutDoNothing = ac->menu()->addAction(QString::fromUtf8("About DoNothing"));

    return true;
}

編譯后啟動QtCreator,菜單如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
雖然可以使用上述方法添加菜單項(xiàng),但并不是推薦的方式。QtCreator中的菜單項(xiàng)必須在Keyboard Shortcuts參數(shù)界面中列出。
通過注冊菜單項(xiàng),可以實(shí)現(xiàn)QtCreator中的菜單項(xiàng)在Keyboard Shortcuts參數(shù)界面中列出。

三、注冊菜單項(xiàng)

QtCreator的所有菜單項(xiàng)都應(yīng)該出現(xiàn)在鍵盤選擇里面的“Keyboard Shortcuts” 中。
Core::Command類表示一個action動作,例如菜單項(xiàng)menu item、工具按鈕tool button,或者是快捷鍵shortcut。開發(fā)者不能直接創(chuàng)建Command對象,而是使用ActionManager::registerAction()注冊一個 action,然后獲取返回值,其返回值就是一個Command。Command對象表示用戶可見的action及其屬性。
下面代碼顯示了如何為DoNothing插件注冊“About DoNothing” 菜單項(xiàng):

#include 
#include 
#include 
#include 

#include 
#include 

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    // Fetch the action manager
    Core::ActionManager* am = Core::ICore::instance()->actionManager();

    // Create a command for "About DoNothing".
    Core::Command* cmd = am->registerAction(
                new QAction(this),
                "DoNothingPlugin.AboutDoNothing",
                Core::Context(Core::Constants::C_GLOBAL));
    cmd->action()->setText(QString::fromUtf8("About DoNothing"));

    // Add the command to Help menu
    am->actionContainer(Core::Constants::M_HELP)->addAction(cmd);

    return true;
}

編譯后運(yùn)行,About DoNothing菜單項(xiàng)已經(jīng)出現(xiàn)在Help菜單的開始位置。
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
使用注冊方式添加菜單項(xiàng),可以在Keyboard Shortcuts參數(shù)界面中列出About DoNothing菜單項(xiàng),并可以關(guān)聯(lián)快捷鍵。
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)

四、響應(yīng)菜單項(xiàng)

DoNothing插件已經(jīng)作為一個菜單項(xiàng)加入到QtCreator中。既然菜單項(xiàng)就是一個QAction,可以通過連接triggered(bool)或者toggled(bool)信號,并增加響應(yīng)trigger、toggled事件的槽函數(shù)。
插件類的實(shí)現(xiàn)如下:
DoNothingPlugin.h文件:

#ifndef DONOTHINGPLUGIN_H
#define DONOTHINGPLUGIN_H

#include 

class DoNothingPlugin : public ExtensionSystem::IPlugin
{
    Q_OBJECT
public:
    DoNothingPlugin();
    ~DoNothingPlugin();

    void extensionsInitialized();
    bool initialize(const QStringList & arguments, QString * errorString);
    void shutdown();
protected slots:
    void doNothing();
};
#endif // DONOTHINGPLUGIN_H

DoNothingPlugin.cpp文件:

#include "DoNothingPlugin.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

DoNothingPlugin::DoNothingPlugin()
{
    // Do nothing
}

DoNothingPlugin::~DoNothingPlugin()
{
    // Do notning
}

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    // Fetch the action manager
    Core::ActionManager* am = Core::ICore::instance()->actionManager();

    // Create a command for "About DoNothing".
    Core::Command* cmd = am->registerAction(
                new QAction(this),
                "DoNothingPlugin.AboutDoNothing",
                Core::Context(Core::Constants::C_GLOBAL));
    cmd->action()->setText(QString::fromUtf8("About DoNothing"));
    // Add the command to Help menu
    am->actionContainer(Core::Constants::M_HELP)->addAction(cmd);

    connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(doNothing()));
    return true;
}

void DoNothingPlugin::extensionsInitialized()
{
    // Do nothing
}

void DoNothingPlugin::shutdown()
{
    // Do nothing
}

void DoNothingPlugin::doNothing()
{
    QMessageBox::information(
            0,
            QString::fromUtf8("About DoNothing Plugin"),
            QString::fromUtf8("Seriously dude, this plugin does nothing")
        );
}

Q_EXPORT_PLUGIN(DoNothingPlugin)

編譯后運(yùn)行QtCreator,點(diǎn)擊DoNothing菜單項(xiàng):
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
使用Qt Creator主窗口作為彈出消息對話框的parent,代碼修改如下:

void DoNothingPlugin::doNothing()
{
    QMessageBox::information(
        Core::ICore::instance()->mainWindow(),
        "About DoNothing Plugin",
        "Seriously dude, this plugin does nothing");
}

五、添加菜單

向QtCreator添加菜單不能使用Core::Command,而是使用Core::ActionContainer,將其添加到MENU_BAR上面。代碼如下:

#include 

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    // Fetch the action manager
    Core::ActionManager* am = Core::ICore::instance()->actionManager();

    // Create a DoNothing menu
    Core::ActionContainer* ac =     am->createMenu("DoNothingPlugin.DoNothingMenu");
    ac->menu()->setTitle(QString::fromUtf8("DoNothing"));
    // Create a command for "About DoNothing".
    Core::Command* cmd = am->registerAction(
                new QAction(this),
                "DoNothingPlugin.AboutDoNothing",
                Core::Context(Core::Constants::C_GLOBAL));
    cmd->action()->setText(QString::fromUtf8("About DoNothing"));
    connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(doNothing()));
    // Add DoNothing menu to the menubar
    am->actionContainer(Core::Constants::MENU_BAR)->addMenu(ac);
    // Add the "About DoNothing" action to the DoNothing menu
    ac->addAction(cmd);

    return true;
}

編譯運(yùn)行QtCreator如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)

六、定位菜單、菜單項(xiàng)位置

當(dāng)前添加的菜單或者菜單項(xiàng)都是在第一個位置。如何修改新增菜單或菜單項(xiàng)的位置,將“DoNothing”菜單放到“Help”前。示例代碼如下:

#include 

bool DoNothingPlugin::initialize(const QStringList& args, QString *errMsg)
{
    Q_UNUSED(args);
    Q_UNUSED(errMsg);

    Core::ActionManager* am = Core::ICore::instance()->actionManager();

    // Create a DoNothing menu
    Core::ActionContainer* ac =         am->createMenu("DoNothingPlugin.DoNothingMenu");
    ac->menu()->setTitle(QString::fromUtf8("DoNothing"));
    // Create a command for "About DoNothing".
    Core::Command* cmd = am->registerAction(
                new QAction(this),
                "DoNothingPlugin.AboutDoNothing",
                Core::Context(Core::Constants::C_GLOBAL));
    cmd->action()->setText(QString::fromUtf8("About DoNothing"));
    connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(doNothing()));
    // Insert the "DoNothing" menu between "Window" and "Help".
    QMenu* helpMenu =   am->actionContainer(Core::Constants::M_HELP)->menu();
    QMenuBar* menuBar =     am->actionContainer(Core::Constants::MENU_BAR)->menuBar();
    menuBar->insertMenu(helpMenu->menuAction(), ac->menu());
    // Add the "About DoNothing" action to the DoNothing menu
    ac->addAction(cmd);

    return true;
}

編譯運(yùn)行QtCreator如下:
QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
可以使用相同的方法定位菜單項(xiàng)的位置。


網(wǎng)站標(biāo)題:QtCreator插件開發(fā)(二)——QtCreator菜單和菜單項(xiàng)
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/pseceh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部