gpt4 book ai didi

c++ - 插件架构中的 Qt Signal 插槽

转载 作者:太空狗 更新时间:2023-10-29 23:13:40 26 4
gpt4 key购买 nike

我正在尝试创建一个具有菜单按钮的应用程序。 单击按钮,将出现一个表单。 表单是使用插件创建的。问题是—— 第一次点击时,会正常生成一个表格。但是在第二次单击时,会生成 2 个以上的表单而不是一个。第 3 次单击会提供 3 个以上的表格,依此类推。每次点击我只需要一个表格。

        Is this has anything to do with Q_PLUGIN_METADATA(IID "Camel1") in interface?

这是我的应用程序Mainwindow.cpp

        spPlugin *objSpPlugin=new spPlugin;

QSqlQuery qryPlugin=objSpPlugin->view_Plugin_Path(this,publicVariables::inEmployeeId,strFormName,evt::onLoad,true);

while(qryPlugin.next())
{


QString

strPluginPath=qryPlugin.value("Plugin_Path").toString();
qDebug()<<strPluginPath;
QDir pluginsDir(QDir::currentPath()+"/Plugin");

QPluginLoader loader(pluginsDir.absoluteFilePath(strPluginPath));

qDebug()<<loader.fileName();

QObject *obj=loader.instance();
qDebug()<<loader.errorString();
if(obj)
{

MainwindowInterface *objMainWindowInterface=qobject_cast<MainwindowInterface *>(obj);

if(objMainWindowInterface)
{
connect(objMainWindowInterface,SIGNAL(CreateNewFormInstance(QWidget*)),SLOT(createNewFormInstance(QWidget*)));

objMainWindowInterface->run();


}

}

}



void MainWindow::createNewFormInstance(QWidget*frmInstance)
{

qDebug()<<"createNewFormInstance";

if( frmInstance!=NULL)
{

//
}
else
{

ui->mdiArea->addSubWindow(frmInstance);
}
}


My plugin InterFace included in pluginproduct.h

//#ifndef PLUGININTERFACE_H
//#define PLUGININTERFACE_H

//#include<QObject>
//#include<QWidget>
//#include<QtSql/QSqlQuery>
//#include<qsqldatabase.h>


class FormInterface:public QObject
{

Q_OBJECT
public:
virtual void Show()=0;

};





Q_DECLARE_INTERFACE(MainwindowInterface,"Cam1")


//#endif // PLUGININTERFACE_H




My Pluginproduct.h


class LibPluginProductForm:public FormInterface

{


Q_OBJECT
Q_PLUGIN_METADATA(IID "Camel1")
Q_INTERFACES(FormInterface)



public:
LibPluginProductForm();

~ LibPluginProductForm();
void Show();


private:

QWidget *frm;


};


my pluginProduct.cpp


LibPluginProductForm::LibPluginProductForm()

{


frm=new QWidget;



}

LibPluginProductForm::~LibPluginProductForm()
{


}

void LibPluginProductForm::Show()

{


emit CreateNewFormInstance(frm);
qDebug()<<"LibPluginProductForm::Show";


frm->show();`enter code here`

}

最佳答案

信号将在调用“CreaeNewFormInstance”时发出,但也会从 LibPluginProduceForm::Show 手动“发出”信号的位置发出。

检查您的“显示”方法是否未被多次调用。您是否在应用程序输出中看到您的调试语句?

关于c++ - 插件架构中的 Qt Signal 插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37677994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com