- Qt Environment
- Qt Singleton
- Qt Update Issue
Qt Environment
installer
default:
- qt creator
- Build tools
MSVC
- vs2019(qt5.15)
- vs2019
- vs2022
Additional Libraries
- Qt5
Included in the integration module
No need to select additional
- Qt6
CMake in Qt Creator
程序设置:
-GNinja
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}
Deploy
- v5.15
C:\Qt\5.15.2\msvc2019_64\bin\windeployqt --qmldir C:\Users\tdtc\Documents\SerialCom\SerialCom\QtRaspberry C:\Users\tdtc\Documents\SerialCom_qml\serialCom.exe
- v6.5
C:\Qt\6.5.3\msvc2019_64\bin\windeployqt --qmldir C:\Users\tdtc\Documents\SerialCom\SerialCom\QtRaspberry C:\Users\tdtc\Documents\SerialCom_qml\serialCom.exe
- v6.8
C:\Qt\6.8.2\msvc2022_64\bin\windeployqt --qmldir C:\Users\tdtc\Documents\SerialCom\SerialCom\QtRaspberry C:\Users\tdtc\Documents\SerialCom_qml\serialCom.exe
Qt Singleton
The version that fully supports singletons is v5.14+
template <typename T> int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName,
std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)
主要的改进是第5个参数! 之前,是实例不了带参的类的。
The main improvement is the fifth parameter! Previously, only classes with no parameters could be instantiated.
- Example for v5.12: qml-cpp-integration-example
qmlRegisterSingletonType<TrafficLightClass>("org.raymii.RoadObjects", 1, 0, "TrafficLightSingleton",
[](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
TrafficLightClass *trafficLightSingleton = new TrafficLightClass();
return trafficLightSingleton;
});
- Example for v5.14+: qml-cpp-integration-example
TrafficLightClass trafficLightSingleton;
qmlRegisterSingletonType<TrafficLightClass>("org.raymii.RoadObjects", 1, 0, "TrafficLightSingleton",
[&](QQmlEngine *, QJSEngine *) -> QObject * {
return &trafficLightSingleton;
});
Qt Update Issue
Issues when upgrading to Qt6
assigned values
ASSERT: "i >= 0 && i < size()" in file qbytearray.h, line 544
The “outBuffer” variable of the Frame class and the “m_buffer” variable of the SerialWorker class are assigned values, and the “=” is changed to “append()”.
- For example, in frame.cpp
Use
m_buffer.append(FRAME_START);
instead of
m_buffer[INDEX_START_OF_FRAME] = FRAME_START;
signal parameters
qt.qml.context: qrc:/main.qml:168:13 Parameter "on" is not declared.
Injection of parameters into signal handlers is deprecated. Use JavaScript functions with formal parameters instead.
- v6
onSwitched: function(on)
{
if(on === true)
FrameProcessorSingleton.enableAdc(1);
else
FrameProcessorSingleton.enableAdc(0);
}