Na ovoj stranici

Izrada proširenja temeljenih na Lua-i

Qt Creator se može proširiti Lua skriptama. Uključeni Lua motor temelji se na Lua 5.4.6.

Pisanje Lua ekstenzija

Da biste stvorili novu Lua ekstenziju, odaberite File > New Project > Library > Qt Creator Lua Plugin.

Za testiranje vaše nove ekstenzije pokrenite svoj projekt. Vaš Application Output trebao bi prikazati Hello from Lua!.

Specifikacija Lua ekstenzije

Lua ekstenzija sastoji se od Lua skripte s istim imenom kao i mapa u kojoj se nalazi. To je potrebno da bi se ekstenzija učitala.

Ovaj skript definira specifikaciju ekstenzije, kao što su njezino prikazano ime, proizvođač i autorska prava.

--- MyExtension.lua
return {
    Id = "myextension",
    Name = "MyExtension",
    Version = "1.0.0",
    CompatVersion = "1.0.0",
    Vendor = "My Company",
    VendorId = "mycompany",
    Category = "Tests",
    Description = "Describe what your extension does in a sentence.",
    LongDescription = [[
        Tell users more about your extension. This text is rendered as Markdown.
    ]],
    Dependencies = {
        { Name = "Lua",  Version = "15.0.0", Required = true }
    },
    setup = function() print("Hello from Lua!") end,
    printToOutputPane = true,
} --[[@as QtcPlugin]]

Postavna funkcija

Funkcija postavljanja se poziva kada se ekstenzija učita. Ovdje možete postaviti funkcionalnost vaše ekstenzije. Budući da se specifikacijska datoteka analizira s vrlo ograničenim dozvolama, potrebno je zahtijevati modul u kojem implementirate stvarnu funkcionalnost.

--- MyExtension.lua
return {
    Name = "MyExtension",
    Version = "1.0.0",
    ...,
    --- This is the setup function that is called when the extension is loaded.
    --- It requires the 'init' module and calls the setup function from the returned table.
    setup = function() require 'init'.setup() end,
}
--- init.lua
function setup()
    print("Hello from Lua!")
end

-- Returns a table with a single field 'setup' that points to the setup function.
return {
    setup = setup
}

Asinkrone operacije

Neke ugrađene operacije rade asinkrono. Za rukovanje time upotrijebite modul Async.

local a = require 'async'
local u = require 'Utils'

a.sync(function()
    print("Lets wait for 5 seconds ...")
    a.wait(u.waitms(5000))
    print("... done!")
end)

Interaktivna pomoć

Kada prvi put otvorite .lua datoteku u uređivaču, od vas će se tražiti da preuzmete Lua Language Server. To je izuzetno korisno jer vam pruža pomoć osjetljivu na kontekst i automatsko dovršavanje.

Qt Creator Lua API

Qt Creator ov Lua API dostupan je Lua ekstenzijama putem niza modula koje možete uvesti pomoću funkcije require. C++ ekstenzije mogu pružiti dodatne module. Jedan primjer toga je LanguageServer Extension koji pruža modul za stvaranje Language Server klijenata.

Dokumente API-ja za Lua module možete pronaći u svojoj instalaciji Qt Creator. Na macOS-u ih možete pronaći u Qt Creator.app/Contents/Resources/lua/meta.

Core.lua

Pristupite i komunicirajte s osnovnim funkcionalnostima Qt Creator a.

action.lua

Stvorite akcije korisničkog sučelja u Qt Creator u.

async.lua

Obradite asinhrone operacije pomoću async/await Lua API-ja.

fetch.lua

Preuzimanje podataka s interneta.

gui.lua

Izradite korisničke sučelje.

lsp.lua

Registrirajte klijente Language Servera.

messagemanager.lua

Prikažite poruke korisniku.

process.lua

Pokrenite vanjske procese.

qt.lua

Pristupite Qt funkcionalnosti.

qtc.lua

Pristupite i proširite Qt- Qt Creator.

settings.lua

Čitaj i piši postavke.

simpletypes.lua

Pristup jednostavnim tipovima.

texteditor.lua

Pristup i manipulacija uređivačima teksta.

utils.lua

Uobičajene pomoćne funkcije i klase.

Proširenje Lua API-ja pomoću C++

Da biste dodali funkcionalnost Lua sučelju, morate registrirati novi modul kod Lua motora.

#include <lua/luaengine.h>

class MyCppExtension final : public ExtensionSystem::IPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "MyCppExtension.json")

public:
    MyCppExtension() {}

private:
    void initialize() final {
        // The registered function will be called when the Lua module 'MyCppExtension' is required.
        // The returned table will be returned from the require call in Lua.
        ::Lua::registerProvider("MyCppExtension", [](sol::state_view lua) -> sol::object {
            sol::table result = lua.create_table();
            result["myFunction"] = [](int a, int b) { return a + b; };
            return result;
        });
     }
};

Zatim možete pristupiti MyCppExtension.myFunction iz svojih Lua skripti na sljedeći način:

local MyCppExtension = require 'MyCppExtension'
--- MyCppExtension is now a table with a single field 'myFunction', as it is returned from the
--- C++ function registered via 'Lua::registerProvider(...)'.
print(MyCppExtension.myFunction(1, 2))

Za više informacija o tome kako registrirati C++ funkcionalnost, pogledajte sol2.

Primjeri

Language Server

Plugin Qt Creator LuaLanguageClient pruža podršku za registraciju vlastitih klijenata Language Servera. Primjer upotrebe možete pronaći u ekstenzijama "Lua Language Server" i "Rust Language Server" na adresi Qt Creator.

Vidi također Stvaranje dodataka temeljenih na C++.

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.