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.
Pristupite i komunicirajte s osnovnim funkcionalnostima Qt Creator a. | |
Stvorite akcije korisničkog sučelja u Qt Creator u. | |
Obradite asinhrone operacije pomoću async/await Lua API-ja. | |
Preuzimanje podataka s interneta. | |
Izradite korisničke sučelje. | |
Registrirajte klijente Language Servera. | |
Prikažite poruke korisniku. | |
Pokrenite vanjske procese. | |
Pristupite Qt funkcionalnosti. | |
Pristupite i proširite Qt- Qt Creator. | |
Čitaj i piši postavke. | |
Pristup jednostavnim tipovima. | |
Pristup i manipulacija uređivačima teksta. | |
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.