百度到的qml无边框窗口拖动的解决办法基本都是根据鼠标点击位置和当前窗口位置来计算移动路径。但是窗口在拖动时会出现晃动,根据打印信息可以看出,qml中获取的当前鼠标坐标数值异常,解决办法是增加一个简单的类为qml提供当前鼠标坐标,具体实现如下:
- 光标提供类
class CursorPosProvider : public QObject
{
Q_OBJECT
public:
explicit CursorPosProvider(QObject *parent = nullptr) : QObject(parent)
{
}
virtual ~CursorPosProvider() = default;
Q_INVOKABLE QPointF cursorPos()
{
return QCursor::pos();
}
};
- 注册该类为qml属性
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
CursorPosProvider mousePosProvider;
view.rootContext()->setContextProperty("mousePosition", &mousePosProvider);
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
- 自定义一个titleBar组件:CustomToolBar.qml
ToolBar{
id: root
width: parent.width
color: "#0099d6" // just random one
property QtObject container
// extra properties, maybe some signals
MouseArea {
id: titleBarMouseRegion
property var clickPos
anchors.fill: parent
onPressed: {
clickPos = { x: mouse.x, y: mouse.y }
}
onPositionChanged: {
container.x = mousePosition.cursorPos().x - clickPos.x//container是主窗口id
container.y = mousePosition.cursorPos().y - clickPos.y
}
}
}
- 在主窗口中调用
header: CustomToolBar { }
完成。 原文:https://stackoverflow.com/questions/39088835/dragging-frameless-window-jiggles-in-qml
来源:CSDN
作者:fevancio
链接:https://blog.csdn.net/qq_36069502/article/details/104579948