以上是效果图, 整个窗口是 qml 窗口
核心代码
#ifndef WIDGETANCHOR_H
#define WIDGETANCHOR_H
#include <QObject>
#include <QQuickItem>
#include <QWidget>
#include <QQmlApplicationEngine>
#include <QQmlContext>
class WgtAnchorMgr: public QObject
{
QWidget * _p_wgt = nullptr;
QQuickItem* _p_quick_item =nullptr;
public:
WgtAnchorMgr();
WgtAnchorMgr(QWidget* pWidget, QQuickItem* pItem);
bool init_info(QWidget* pWidget, QQuickItem* pItem);
bool init_info(QQmlApplicationEngine &engine, const QString &object_name, QWidget* pWidget);
bool init_info(QQmlApplicationEngine &engine, const QString &object_name, std::function<QWidget *()> fun);
void init_connect();
~WgtAnchorMgr();
private:
void updateGeometry();
};
#endif // WIDGETANCHOR_H
#include "WgtAnchorMgr.h"
#include <QQuickItem>
#include "WgtAnchorMgr.h"
#include <QQuickWidget>
#include <QQmlContext>
WgtAnchorMgr::WgtAnchorMgr()
{
}
WgtAnchorMgr::WgtAnchorMgr(QWidget* pWidget, QQuickItem* pItem)
: QObject(pWidget), _p_wgt(pWidget), _p_quick_item(pItem)
{
connect(_p_quick_item, &QQuickItem::xChanged, this, &WgtAnchorMgr::updateGeometry);
connect(_p_quick_item, &QQuickItem::yChanged, this, &WgtAnchorMgr::updateGeometry);
connect(_p_quick_item, &QQuickItem::widthChanged, this, &WgtAnchorMgr::up