Qt bug

1、Qt5.2.1不支持QQuickwidget来承载qml

2、Qt5.12以及以上,不支持跨线程调用数据库连接

3、线程A不断产生sql语句,需要让两个数据库分别执行这个sql语句。所以在线程A中建立两个子线程B和C,分别对应两个数据库。然后发现两个线程同时启动【即两个线程同时调Qt访问mysql的dll】会报错:

 

 解决:https://www.cnblogs.com/judes/p/7305953.html

4、Qt5.2.1使用QSetting,打印allkeys,找不到section

 

 

 5、组件构造顺序引入的anchor问题

ToolBar.qml

import QtQuick 2.0
import QtQml.Models 2.15

Item {
    id: id_p

    property var data: null
    onDataChanged: {
        console.log("onDataChanged")
    }
    Item {
        id: id_menuBarGrid
//        anchors.left: parent?parent.left:undefined
        anchors.left: parent.left
        Component.onCompleted: {
            console.log("id_menuBarGrid", parent)
        }
    }
    Component.onCompleted: {
        console.log("id_p", id_p)
    }
}

在main里:

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    //工具栏
    ToolBar {
        id:id_toolBar
        height: 34
        width: 200
        Component.onCompleted: {
            console.log("id_toolBar onCompleted")
        }
    }

}

此时报错:TypeError: Cannot read property 'left' of null。原因分析:

  1. 父组件开始构造(但尚未完成)。

  2. 子组件的属性按声明顺序初始化(例如 property var data: null)。

  3. 子组件的 anchors 绑定(anchor布局)立即计算(此时 parent 可能还未完全就绪),此时报错parent为null。

  4. 父组件构造完成,parent 正式可用。

解决:

将anchors.left: parent.left
改为
anchors.left: parent?parent.left:undefined
或者
Component.onCompleted: {
    anchors.left = parent.left;  // 确保 parent 存在
}
或者
Binding {
    target: id_menuBarGrid
    property: "anchors.left"
    value: id_menuBarGrid.parent.left
    when: id_menuBarGrid.parent  // 仅当 parent 存在时执行
}

 这应该是qt的bug:https://bugreports.qt.io/browse/QTBUG-106645

 setction:没有CFG,使用的时候就找不到对应的value

解决:不要section

 

5、Qt5.6以上无法使用QWebView,只能使用webenginewidgets相关套件【安装Qt的时候勾选上】,然而webenginewidgets只支持MSVC编译器,所以无法跨平台。

所以想使用Qt5.6以上的Migw来加载本地HTML,貌似Qt无法实现

6、新建A工程,界面里新建label控件,再新建B工程,把A工程的界面复制过来,将B工程中的label控件提升为带有QSS的控件【如呼吸灯】,此时QSS不会生效,删除了再重新建label、提升就可以了

 综上,如果希望Qt支持QQuickWidget来承载qml【5.3以上】,希望能使用QWebView来加载本地HTML文件【5.6以下】,希望能跨线程调用数据库对象QSqlDateBase【5.12以下】,选择Qt5.5是最优选择

7、环境为Qt5.10.1,网络编程,将一个端口设置为tcp服务器监听后,或者设置为UDP端口bind后,再设置为tcp客户端去bind,然后connectToHost,就会失败。【有时候失败有时候不失败,但大多时候失败,网上无相关说明】

 

 

8、QML Canvas焦点切换,画的东西消失

https://www.cnblogs.com/judes/p/14095098.html

 

9、QStackedWidget界面切换,程序崩溃或无响应

Qt5.6.1,分辨率为1600x1200,切换QStackedWidget->setCurrentIndex,打印切换成功,但是界面卡死,分辨率换回来ok,版本换为1920x1080是正常的。

猜测跟界面刷新有关,尝试主动刷新【update、repaint】也不行

posted @ 2019-10-22 17:16  朱小勇  阅读(486)  评论(0)    收藏  举报