跳到內容

QML and Qt Quick

Looking for The Bling Thing(tm)? Post here!
20.0k 主題 77.4k 貼文
  • Cant refresh QML item only after using it.

    Unsolved
    3
    0 評價
    3 貼文
    333 瀏覽
    B
    Didnt know about breaking bindings yet and I feel like I dont understand the code onActivated well. What does => means / how it's named? Currently the custom item is defined like this: LeftBind { id: enabler x: 291 y: 15 keyName: keyTranslator.getKey(Config.enabler) //Config.enabler is vkey (int), this function converts it to readable string (for example from c++ vkey 0x10 to "ALT") onAccepted: { var a = keyTranslator.getCode(keyName); // from string to vkey if(a === 404){ askForKey() } else { Config.set_enablerBtn(a) } } }
  • Scenegraph with OpenGL : Unwanted rendering

    Unsolved scengraph vtk opengl qquickwindow synchronization
    6
    0 評價
    6 貼文
    947 瀏覽
    J
    @JoeCFD I was working on other stuffs but now I remember why I can't override QQuickItem update() method... it is a non-virtual slot, so it can't solve my rendering issues. I am still looking for a solution ...
  • 0 評價
    2 貼文
    962 瀏覽
    A
    @jeanmilost Your logic seems to be correct. What you have to do is to move the re-calculation of Scrollbar size & position to the Rectangle rcPageContainer because you are applying scale for that. Rectangle { id: rcPageContainer objectName: "rcPageContainer" ... /// called when page viewport width changed onWidthChanged: { sbHorz.size = rcPageViewport.width / rcPageContainer.width sbHorz.position = Math.min(Math.max(sbHorz.position, 0.0), 1.0 - (sbHorz.size)); } /// called when page viewport height changed onHeightChanged: { sbVert.size = rcPageViewport.height / rcPageContainer.height sbVert.position = Math.min(Math.max(sbVert.position, 0.0), 1.0 - (sbVert.size)); } }
  • 0 評價
    1 貼文
    279 瀏覽
    尚無回覆
  • Import says QML module not found.

    Unsolved
    11
    0 評價
    11 貼文
    4k 瀏覽
    R
    Okay. Thanks. I would have tried to use the QML2 path!
  • Customiza ComboBox in QML

    Solved
    8
    0 評價
    8 貼文
    771 瀏覽
    ?
    It's work. Thanks Result [image: Screenshot_20211128_143000.jpg]
  • Memory leak bug with Qt Quick (QT 6.2.1)

    Unsolved
    5
    0 評價
    5 貼文
    713 瀏覽
    M
    Thanks for the tip on Stackoverflow, I can see that QT6Guid is Allocating that memory but never releases it. Also there is Unresolved Allocation which I don't know what it is. The test was : Set the window to minimum size Take Memory Snapshot Resize the window by dragging the mouse multiple time Take a Memory Snapshot Repeat One more time Anybody have a clue on what's happening? Unresolved Allocation Qt6Guid.dll!QGles2GraphicsPipeline [image: 858fb3b1-d888-439c-923a-c05dec1c9fcb.png]
  • Qt6.2 TableView and ItemSelectionModel - Row / Column Selection Modes?

    Unsolved
    1
    0 評價
    1 貼文
    188 瀏覽
    尚無回覆
  • coverage using TUG for qt 5.15

    Unsolved
    2
    0 評價
    2 貼文
    257 瀏覽
    K
    The following link provides the information about Qt /QML application coverage analysis and looking for any similar Plugins from forum. Hoping to hear soon. https://forum.qt.io/topic/61133/tug-framework-open-source-gui-unit-testing-for-qt-applications
  • Cannot choose QtQuick version in Ubuntu

    Unsolved
    1
    0 評價
    1 貼文
    755 瀏覽
    尚無回覆
  • animation does not work as excepted in qml

    Unsolved
    2
    0 評價
    2 貼文
    283 瀏覽
    尚無回覆
  • Dynamic component makes multiple components !!! in qml

    Solved
    3
    0 評價
    3 貼文
    358 瀏覽
    Q
    @GrecKo thank you for your answer. actually i did'nt know this way to make my component dinamically. i learned this thing about binding and now i know. thanks
  • Optional Javascript engine in Qt 6.1 / 6.2 - ETA?

    Unsolved
    4
    0 評價
    4 貼文
    446 瀏覽
    sierdzioS
    It is not available in 6.2. I don't know what the plans are, sorry. Maybe ask on qt-devel mailing list?
  • Qt quick width HorizontalHeaderView

    Unsolved
    2
    0 評價
    2 貼文
    375 瀏覽
    Y
    I have the same problem too, have you solved it? Still exists in Qt6.2.1
  • 0 評價
    3 貼文
    391 瀏覽
    V
    Issue was the name used when setting the font. Should not be using, "Liberation", but "LiberationSans". That being the case, it was also not necessary to set the style to SansSerif, as that was the only style available for the "LiberationSans" font.
  • Application Portrait and Landscape mode (Horizontal/Vertical rotation)

    Solved
    8
    0 評價
    8 貼文
    2k 瀏覽
    SebastianMS
    I didn't add anchors.centerIn: parent in content Item (which is rotated and is changing size). In result, after rotation Item was placed in completely crazy place.
  • Qt Creator complains Unknown component M300 for items from library

    Solved
    2
    0 評價
    2 貼文
    896 瀏覽
    SebastianMS
    When I moved whole content of components to Module. Added qmldir and explicitly enumerate all files inside. After that set(QML_IMPORT_PATH ${CMAKE_CURRENT_LIST_DIR}/qml ${CMAKE_SOURCE_DIR}/common CACHE STRING "" FORCE) was enough for Qt Creator to find missing or unknown components.
  • Qt6.2 TableView SelectionModel / Rectangle selection not working

    Solved
    3
    0 評價
    3 貼文
    759 瀏覽
    denishessbergerD
    Thanks! Would be great if the example itself would also contain either interactive: false or the selectionMode.
  • Lots of TypeErrors in console when migrating to Qt6

    Unsolved
    5
    0 評價
    5 貼文
    1k 瀏覽
    TassosT
    I am facing the same issue. It seems that the macOS style is broken. The workaround to get rid of these warnings is to force the Basic style via: QQuickStyle::setStyle("Basic");
  • Best approach for viewing C++ logging in QML

    Unsolved
    2
    0 評價
    2 貼文
    2k 瀏覽
    W
    I did it with second approach, but it's not a string buffer but a log emitter, which just store latest log and alerts to QML by signal. The message handler LogManager::RedirectToStdout and LogManager::RedirectToFile change the log emitter when called. /// LogManager.hpp #ifndef LOGMANAGER_HPP #define LOGMANAGER_HPP #include <QObject> #include <QString> #include <QDateTime> #include <QFile> #include <QMutex> class LogEmitter : public QObject { friend class LogManager; Q_OBJECT Q_PROPERTY(QString time MEMBER m_Time NOTIFY changed) Q_PROPERTY(QString type MEMBER m_Type NOTIFY changed) Q_PROPERTY(QString message MEMBER m_Message NOTIFY changed) public: explicit LogEmitter(QObject *parent = nullptr) {} void Set(const QString &Time, const QString &Type, const QString &Message) { m_Time = Time; m_Type = Type; m_Message = Message; m_Full = m_Time + " " + m_Type + ": " + m_Message; emit changed(); } QString GetString() { return m_Full; } signals: void changed(); private: QString m_Time; QString m_Type; QString m_Message; QString m_Full; }; class LogManager : public QObject { Q_OBJECT public: static LogManager &Initialize(); LogEmitter *GetEmitter(); private: static void RedirectToStdout(QtMsgType type, const QMessageLogContext &context, const QString &msg); static void RedirectToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg); private: explicit LogManager(QObject *parent = nullptr); private: static LogEmitter *m_LogEmitter; }; #endif // LOGMANAGER_HPP #include "LogManager.hpp" LogEmitter *LogManager::m_LogEmitter = new LogEmitter; namespace LogManagerVars { QDateTime DateTime; QFile File; }; LogManager &LogManager::Initialize() { LogManager *SingletonObject = new LogManager; if (qEnvironmentVariableIsEmpty(qgetenv("QTDIR"))) // If Qt creator then not write to file { qInstallMessageHandler(RedirectToStdout); } else { LogManagerVars::DateTime = QDateTime::currentDateTime(); LogManagerVars::File.setFileName(LogManagerVars::DateTime.toString("yyyy.MM.dd") + ".log"); qInstallMessageHandler(RedirectToFile); } return *SingletonObject; } LogEmitter *LogManager::GetEmitter() { return m_LogEmitter; } void LogManager::RedirectToStdout(QtMsgType type, const QMessageLogContext &context, const QString &msg) { QByteArray localMsg = msg.toLocal8Bit(); QString TypeStr; switch (type) { case QtDebugMsg: fprintf(stderr, "Debug: %s \n", localMsg.constData()); TypeStr = "DEBUG"; break; case QtInfoMsg: fprintf(stderr, "Info: %s \n", localMsg.constData()); TypeStr = "INFO"; break; case QtWarningMsg: fprintf(stderr, "Warning: %s (%s:%u)\n", localMsg.constData(), context.file, context.line); TypeStr = "WARNING"; break; case QtCriticalMsg: fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); TypeStr = "ERROR"; break; case QtFatalMsg: fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function); TypeStr = "ERROR"; abort(); } m_LogEmitter->Set(QDateTime::currentDateTime().toString("[hh:mm:ss]"), TypeStr, msg); } void LogManager::RedirectToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg) { if (type != QtInfoMsg && type != QtCriticalMsg) return; static QMutex Mutex; QMutexLocker lock(&Mutex); if (!LogManagerVars::File.isOpen()) if (!LogManagerVars::File.open(QIODevice::Append | QIODevice::Text)) return; m_LogEmitter->Set(QDateTime::currentDateTime().toString("[hh:mm:ss]"), (type == QtInfoMsg ? "INFO" : "ERROR"), msg); QString Output = m_LogEmitter->GetString() + "\n"; LogManagerVars::File.write(Output.toUtf8()); LogManagerVars::File.close(); } LogManager::LogManager(QObject *parent) { } /// main.cpp #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include "LogManager.hpp" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/src/qml/MainWindow.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); LogManager *logger = &LogManager::Initialize(); LogEmitter *log = logger->GetEmitter(); engine.rootContext()->setContextProperty("log", log); engine.load(url); return app.exec(); } /// QML Popup { visible: false modal: true focus: false closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent padding: 10 ListModel { id: listModel function push(newElement) { if (listModel.count >= 50) listModel.remove(0); listModel.append(newElement); } } Component { id: delegate TextInput { selectByMouse: true text: timeStr + " " + typeStr + ": " + messageStr color: typeStr == "INFO" ? "black" : (typeStr == "ERROR" ? "red" : "blue") } } ListView { id:lst height: parent.height*0.8 width: parent.width/2 anchors.verticalCenter: parent.verticalCenter model: listModel delegate: delegate } Connections { target: log onChanged: { listModel.push({ timeStr: log.time, typeStr: log.type, messageStr: log.message }) } } }