您当前的位置: 首页 > 

龚建波

暂无认证

  • 5浏览

    0关注

    312博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

《QDebug 2021年8月》

龚建波 发布时间:2021-08-14 14:26:25 ,浏览量:5

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Controls 2.15 SpinBox 自定义导致异常

打开文档,将自定义的 demo 拷贝出来命名为 MySpin,然后 main 中这样写:

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 640
    height: 480
    visible: true

    MySpin {
        //复制的qt spinbox自定义示例
    }

    Rectangle {
        //red是不存在的,正常应该报错
        color: red.color
    }
}

正常情况下应该报错 red 未定义,但是实际上不会有 red 未定义的错误提示,并且在关闭程序时会有异常提示:

如果删除自定义 SpinBox 中的 value 或者 up+down,运行效果就符合预期了。(在使用时初始化 value 没有异常,只是组件定义时设置初值会有异常)

解决方法,换成 Templates 中的 SpinBox 则自定义组件就可以正常使用了:

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Controls.impl 2.12
import QtQuick.Templates 2.12 as T

T.SpinBox { //换成template
    id: control
    value: 50
    //... ...
}
2.MouseArea的wheel鼠标滚轮事件默认会穿透

MouseArea的wheel鼠标滚轮事件默认是会穿透的,需要自己onWheel接收下才能阻止事件冒泡。

测试例子:

    MouseArea{
        anchors.fill: parent
        hoverEnabled: true
        acceptedButtons: Qt.AllButtons
        onPressed: console.log('bottom preee')
        onReleased: console.log('bottom release')
        onClicked: console.log('bottom click')
        onWheel: console.log('bottom wheel')

        Rectangle{
            width: 200
            height: 200
            color: "green"
            anchors.centerIn: parent
            MouseArea{
                anchors.fill: parent
                hoverEnabled: true
                acceptedButtons: Qt.AllButtons
                //preventStealing: true
                //propagateComposedEvents: true
                //如果wheel不自己处理默认会穿透下去
                //onWheel: console.log('top wheel') 或者写 wheel.acccpted=true
            }
        }
    }
三、其他​​​​​​​ 1.QtCreator 中编译时 [[deprecated]] 属性没有警告

[[deprecated]] 是 C++14 标准出的一个弃用属性,可以标记一些弃用的接口

[[deprecated]]
void func1() {
}

详见文档:C++ attribute: deprecated (since C++14) - cppreference.com

在 VS2019 种使用该属性时,由于默认开启了 sdl 检查,会当作编译错误。关闭 sdl 后,默认的警告等级为 W3,会提示弃用信息(C4996)。

在 Qt Creator 中编译时默认配置没有警告信息,因为 qmake 的默认参数有 -w44996 将 4996 指定为了 w4 等级触发警告,而默认又是 w3 的警告等级,所以会忽略 C4996 的警告。

 可以修改 pro 配置:

QMAKE_CXXFLAGS_WARN_ON -= -w44996

(还要注意 C++ 标准至少设置为 14,不然弃用属性也可能会被忽略,或是其他行为)

也可以使用 /WX 或者 /sdl 参数使弃用提升为错误:

QMAKE_CXXFLAGS_WARN_ON -= -w44996
#QMAKE_CXXFLAGS_WARN_ON += -WX
QMAKE_CXXFLAGS_WARN_ON += -sdl
CONFIG += c++17
#QMAKE_CXXFLAGS += -std:c++latest

关注
打赏
1655829268
查看更多评论
立即登录/注册

微信扫码登录

0.0460s