C++学习(一六零)QQuickItem是如何显示到窗口的

1、QQuickWindow的创建

2、qquickitem的创建

(1)QQuickWindow下的QQuickItem的创建

(2)qml文件中的QQuickItem的创建

 

 

将创建好的QQuickItem放入QQuickWindow的脏对象列表(dirtyItemList)

qtdeclarative\src\quick\items\qquickitem.cpp
void QQuickItemPrivate::addToDirtyList()
{
    if (!prevDirtyItem) {
        QQuickWindowPrivate *p = QQuickWindowPrivate::get(window);
        nextDirtyItem = p->dirtyItemList;
        if (nextDirtyItem) QQuickItemPrivate::get(nextDirtyItem)->prevDirtyItem = &nextDirtyItem;
        prevDirtyItem = &p->dirtyItemList;
        p->dirtyItemList = q;
        p->dirtyItem(q);
    }
}

 

 

3、qquickitem准备好场景图。

参看C++学习(一六八)qt如何构建场景树

 

qtdeclarative\src\quick\items\qquickwindow.cpp
void QQuickWindowPrivate::updateDirtyNodes()
{
    qCDebug(DBG_DIRTY) << "QQuickWindowPrivate::updateDirtyNodes():";

    cleanupNodes();

    QQuickItem *updateList = dirtyItemList;
    dirtyItemList = nullptr;
    if (updateList) QQuickItemPrivate::get(updateList)->prevDirtyItem = &updateList;

    while (updateList) {
        QQuickItem *item = updateList;
        QQuickItemPrivate *itemPriv = QQuickItemPrivate::get(item);
        itemPriv->removeFromDirtyList();

        qCDebug(DBG_DIRTY) << "   QSGNode:" << item << qPrintable(itemPriv->dirtyToString());
        updateDirtyNode(item);
    }
}

一个场景图实例

QuickWindow->QSGRoot
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤来在C++中调用Qt插件并将其显示窗口中: 1. 首先,确保你已经安装了Qt开发环境并设置好了相关的路径。 2. 创建一个Qt应用程序,并在主窗口中添加一个QWidget或QFrame控件,作为插件的容器。 3. 在你的C++代码中,使用QLibrary类加载插件库。例如,假设你的插件库名为"myplugin.dll"(Windows)或"libmyplugin.so"(Linux),可以使用以下代码加载它: ```cpp QLibrary pluginLib("myplugin"); if (pluginLib.load()) { // 插件库加载成功 typedef QWidget* (*CreatePluginWidget)(); CreatePluginWidget createWidget = (CreatePluginWidget)pluginLib.resolve("createWidget"); if (createWidget) { // 创建插件中的QWidget实例 QWidget* pluginWidget = createWidget(); if (pluginWidget) { // 将插件的QWidget添加到你的主窗口中 pluginWidget->setParent(mainWindow); pluginWidget->show(); } } } else { // 插件库加载失败 qDebug() << pluginLib.errorString(); } ``` 4. 在你的插件项目中,创建一个导出函数,用于创建并返回你的插件QWidget实例。例如: ```cpp extern "C" QWidget* createWidget() { return new MyPluginWidget; } ``` 5. 编译你的插件库,并将生成的库文件放置在与你的应用程序可执行文件相同的目录下。 通过以上步骤,你可以成功加载并显示Qt插件中的QWidget控件在你的主窗口中。请注意,上述示例代码仅供参考,具体实现可能因你的项目需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值