QT 自定义控件保存到xml 文件中

前面自己定义了一些控件可以实现一些显示功能,现在需要把控件保存成xml 文件,然后打开文件可以把控件显示在页面上。

2023-09-20 16-43-52

功能比较简单在原来的页面class 中增加两个函数来实现这个功能。

    void loadWidgetFromFile(QString  Path);
    void SaveWidgetToFile(QString  Path);
保存控件到xml 中

通过调用 QXmlStreamWriter来写xml 文件,首先获取页面中的所有widget list,包含页面自身,保存的时候可以去掉。

  QList<QWidget*> allWidgets = this->findChildren<QWidget*>();

然后获取控件的名字和位置,大小,保存到xml中

            writer.writeStartElement("Widget");
            writer.writeAttribute("title", widget->windowTitle());
            writer.writeAttribute("x", QString::number(widget->pos().x()));
            writer.writeAttribute("y", QString::number(widget->pos().y()));
            writer.writeAttribute("width", QString::number(widget->size().width()));
            writer.writeAttribute("height", QString::number(widget->size().height()));
            writer.writeEndElement();
加载xml文件还原控件

       通过QXmlStreamReader来读取xml 文件,在读取控件的名字和位置

          QString title = reader.attributes().value("title").toString();
          int x = reader.attributes().value("x").toInt();
          int y = reader.attributes().value("y").toInt();

在调用工厂类来生成控件

void QNewPageTable::addChildWidget(QString name,int x,int y)
{
    std::unique_lock<std::mutex> its_lock(mutex_);
    pPlug=componentFactory::getInstance()->CreateComponent(name);
    if(pPlug!=nullptr)
    {
        componentNum++;

        connect(pPlug,SIGNAL(clicked(bool,QObject *)), this, SLOT(slotWidgetClicked(bool,QObject *)));

        connect(pPlug,SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(slotcustomContextMenuRequested(const QPoint &)));

        pPlug->setContextMenuPolicy(Qt::CustomContextMenu);

        pPlug->setParent(this);

        pPlug->setComponentIndex(componentNum);
        widgetIndex.insert(componentNum,pPlug);

        pPlug->setValue(20);

        pPlug->setWindowTitle(name);

        pPlug->move(x,y);

        pPlug->show();



        QMetaObject  meta = pPlug->getQMeat();

        emit showObjectProperty(meta,pPlug);
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值