16

私はQtQuick 2.0プレゼンテーションに取り組んでおり、いくつかのコード サンプルを埋め込みたいと考えています。シンタックスハイライトQML要素を簡単に作成することは可能ですか?

TextEdit問題の目的は、またはに構文強調表示を適用することTextAreaです。Qt に があることは知っていますが、それを aまたはQSyntaxHighlighterに正確に適用する方法について、ドキュメントはあまり明確ではありません。TextEditTextArea

それがどのように行われたかの例を提供できますか?

4

5 に答える 5

10

Qt Quick のアイテムは、タイプのプロパティをTextEdit公開します。これは明示的に公開されているため、ドキュメントで直接使用できます。textDocumentQQuickTextDocumentQSyntaxHighlighter

Qt 5.3 の QtQuick textEdit ドキュメント

于 2014-11-14T10:00:10.337 に答える
5

あなたのアプリファイルで:

QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQuickTextDocument* doc = childObject<QQuickTextDocument*>(engine, "textEditor", "textDocument");
Q_ASSERT(doc != 0);

// QSyntaxHighlighter derrived class
MySyntaxHighlighter* parser = new MySyntaxHighlighter(doc->textDocument());
// use parser, see QSyntaxHighlighter doc...
int ret = app.exec();
delete parser;
return ret;

子オブジェクトを取得するテンプレート関数 (objectName の最初の出現を返すため、一意の名前を使用して qml ファイル内のオブジェクトを識別します):

template <class T> T childObject(QQmlApplicationEngine& engine,
                                 const QString& objectName,
                                 const QString& propertyName)
{
    QList<QObject*> rootObjects = engine.rootObjects();
    foreach (QObject* object, rootObjects)
    {
        QObject* child = object->findChild<QObject*>(objectName);
        if (child != 0)
        {
            std::string s = propertyName.toStdString();
            QObject* object = child->property(s.c_str()).value<QObject*>();
            Q_ASSERT(object != 0);
            T prop = dynamic_cast<T>(object);
            Q_ASSERT(prop != 0);
            return prop;
        }
    }
    return (T) 0;
}

qml ファイルで、objectName プロパティが正しく設定された TextEdit (Flickable 内または任意のもの) を使用します。

.... 
TextEdit {
    id: edit
    objectName: "textEditor"
    width: flick.width
    height: flick.height
    focus: true
    font.family: "Courier New"
    font.pointSize: 12
    wrapMode: TextEdit.NoWrap
    onCursorRectangleChanged: flick.ensureVisible(cursorRectangle)
}
....

于 2015-06-24T15:21:16.323 に答える
3

QSyntaxHighlighterを見てください。

構文の強調表示を行う QML アイテムが必要な場合は、QDeclarativeItem上記のユーティリティを拡張して使用することで、独自のアイテムを簡単に作成できます。

于 2013-02-14T08:31:59.900 に答える