本文主要是介绍《QDebug 2023年12月》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、Qt Widgets 问题交流
1.
二、Qt Quick 问题交流
1.Q_REVISION 标记的信号槽或者 REVISION 标记的属性,在子类中访问
Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例,继承后去访问 REVISION 标记的 opacity 属性或者 Q_REVISION 标记的 closing 信号,会报错提示 is not available:
#include <QQuickWindow>class MyWindow : public QQuickWindow
{
public:using QQuickWindow::QQuickWindow;
};
qmlRegisterType<MyWindow>("Test", 1, 0, "MyWindow");
import QtQuick 2.15
import Test 1.0MyWindow {width: 640height: 480visible: truetitle: qsTr("Test")opacity: 0.5onClosing: console.log("close")
}
只需要用 qmlRegisterRevision 把基类也注册下,并指定一个更大的 VERSION 号就行了。
qmlRegisterType<MyWindow>("Test", 1, 0, "MyWindow");
qmlRegisterRevision<QQuickWindow, 15>("Test", 1, 0);
qmlRegisterRevision<QWindow, 15>("Test", 1, 0);
注意,如果基类有多层,把带 VERSION 属性的都注册下才行,比如 QWindow 是 QQuickWindow 父类也要注册下。
2.Qt5 点击按钮关闭子窗口时,按钮的 hovered 没有重置
给按钮加一个 ToolTip 关联 hovered 显示,子窗口 close 再 show,原来的 ToolTip 没有消失,鼠标晃一下才会消失,因为此时按钮的 hovered 没重置。
Qt5.15.2 测试 close 后再 show ToolTip 还在,hovered 未重置,但 hide 没问题;
Qt6.6.1 测试 close 没问题 hovered 已重置,但 hide 后再 show ToolTip 会闪一下。
测试代码:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {id: rootwidth: 640height: 480visible: truetitle: qsTr("Main Window")Window {id: windowwidth: 400height: 300visible: falsetitle: qsTr("Sub Window")Button {text: hovered ? "hovered" : "close"ToolTip.visible: hoveredToolTip.text: textonHoveredChanged: console.log("hoverd", hovered)onClicked: {console.log("clicked")window.close()}}onClosing: console.log("on closing")}Row {anchors.centerIn: parentButton {text: "show"onClicked: window.show()}}
}
三、其他
1.Windows 平台设置 Qt::FramelessWindowHint 无边框后,在副屏幕最大化时,自动切换为全屏把任务栏挡住了
Qt Bug Tracker:https://bugreports.qt.io/browse/QTBUG-51327
一般最大化时 Visibility 是 Maximized,但是无边框状态下自动切换为 FullScreen,会把任务栏挡住。根据 Qt Bug Tracker 上的记录来看,在 5.15.9, 6.3.0 Beta2, 6.4.0 Beta1 进行了修复。如果使用的是 Qt5.15 的低版本,可以编译高版本的 qwindows 插件替换下。
文件路径如:5.15.2\msvc2019\plugins\platforms\qwindows.dll
2.Windows 平台设置 Qt::CustomizeWindowHint 自定义标题栏后,标题栏的位置会保留一个白条
FramelessWindowHint 去掉了标题栏和边框,CustomizeWindowHint 只去掉了标题栏,但是边框还在,如果能直接修改去掉标题栏残留的白条那比用 FramelessWindowHint 再做阴影方便点。
这个叫赵宇航的老哥提交了一个修复:https://codereview.qt-project.org/c/qt/qtbase/+/384712
这篇关于《QDebug 2023年12月》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!