Article View: pl.comp.lang.c
Article #309769Re: C++, Qt, Pluginy
From: szykcech
Date: Sat, 29 Dec 2018 20:44
Date: Sat, 29 Dec 2018 20:44
40 lines
3322 bytes
3322 bytes
W dniu sobota, 29 grudnia 2018 21:33:49 UTC+1 użytkownik Borneq napisał:
> W dniu 29.12.2018 o 21:17, szykcech@gmail.com pisze:
> >> widget edytora to jest standardowo brany z Qt?
> >
> > Tak.
>
> QPlainTextEdit?
Tak.
> >> jaka klasa służy do podświetlania składni oraz sprawdzania pisowni?
> > Z Kde KSyntaxhighlighting, chyba stąd:
> > https://github.com/KDE/syntax-highlighting
> >
>
> Potem jakoś przyłącza się ten highlighter do QPlainTextEdit'a?
Robisz coś w stylu:
MyEditor: public QPlainTextEdit
{
protected:
SyntaxHighlighter* mSyntaxHighlighter = nullptr;
KSyntaxHighlighting::Repository mRepository;
};
I potem w cpp:
MyEditor::MyEditor(QWidget* aParent) : QPlainTextEdit(aParent)
{
mSyntaxHighlighter = new SyntaxHighlighter(document());
}
Potem w funkcji openFile(QString aFileName) ładujesz plik i robisz detekcję rodzaju wg nazwy lub rozszerzenia - niestety wykrywanie pliku po zawartości chyba nie działa, wiec ja obsługiwałem to na piechotę dla plików jakich używam.
Standardowa detekcja wygląda tak:
KSyntaxHighlighting::Definition lDef = mRepository.definitionForFileName(mInputFileInfo->mFileName);
if(!lDef.isValid() && mInputFileInfo->mExt.length())
lDef = mRepository.definitionForFileName(C::gBaseName(mInputFileInfo->mFileName, false) + '.' + mInputFileInfo->mExt); // try open file detected by content
if(lDef.isValid()) mSyntaxHighlighter->setDefinition(lDef);
Tak mam zrobione w wersji monolitycznej. Użyte funkcje z mojej biblioteki są samo opisowe, więc nie będę tłumaczył (jedynie podam, że C::gBaseName(mInputFileInfo->mFileName, false) zwraca nazwę pliku bez rozszerzenia).
Technical Details
Message-ID:
<a1e5c232-825c-4d15-9a68-7be85944f03c@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!v55no4039921qtk.0!news-out.google.com!h3ni8133qtk.1!nntp.google.com!v55no4039918qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<38ca6860-de3a-49ff-8fb1-88b49056dd25@googlegroups.com> <q07ts9$2me$1@node2.news.atman.pl> <391a4159-3ab9-44b9-9cce-7d47516dfc15@googlegroups.com> <q07vm4$4dg$1@node2.news.atman.pl> <78f2b757-5cd7-41cf-831c-1ed4d0f2e3a3@googlegroups.com> <q08lnc$p92$1@node2.news.atman.pl>Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:a582:: with SMTP id o124mr22530778qke.26.1546116275985; Sat, 29 Dec 2018 12:44:35 -0800 (PST) X-Received: by 2002:a25:f207:: with SMTP id i7-v6mr333872ybe.3.1546116275834; Sat, 29 Dec 2018 12:44:35 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!v55no4039921qtk.0!news-out.google.com!h3ni8133qtk.1!nntp.google.com!v55no4039918qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Sat, 29 Dec 2018 12:44:35 -0800 (PST) In-Reply-To: <q08lnc$p92$1@node2.news.atman.pl> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=188.146.112.172; posting-account=pyti1AoAAAAf66c003TUy10QAAnMWaKw NNTP-Posting-Host: 188.146.112.172 References: <38ca6860-de3a-49ff-8fb1-88b49056dd25@googlegroups.com> <q07ts9$2me$1@node2.news.atman.pl> <391a4159-3ab9-44b9-9cce-7d47516dfc15@googlegroups.com> <q07vm4$4dg$1@node2.news.atman.pl> <78f2b757-5cd7-41cf-831c-1ed4d0f2e3a3@googlegroups.com> <q08lnc$p92$1@node2.news.atman.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <a1e5c232-825c-4d15-9a68-7be85944f03c@googlegroups.com> Subject: Re: C++, Qt, Pluginy From: szykcech@gmail.com Injection-Date: Sat, 29 Dec 2018 20:44:35 +0000 Lines: 51 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit