
Originally Posted by
wysota
Where do you process Qt's events?
I really don`t do any special managment for events. I just have this code for MyApplication class (inherited from QApplication):
try {
}
catch(std::exception & ex) {
handleError(ex.what());
}
catch(...) {
handleError(tr("Critical error: unhandled exception"));
}
return false;
}
bool MyApplication::notify(QObject * obj, QEvent * event) {
try {
return QApplication::notify(obj, event);
}
catch(std::exception & ex) {
handleError(ex.what());
}
catch(...) {
handleError(tr("Critical error: unhandled exception"));
}
return false;
}
To copy to clipboard, switch view to plain text mode
Added after 13 minutes:
Maybe it`ll be useful if I show you a code of creating and using MyApplication object.
Main dll function is:
BOOL APIENTRY DllMain(HANDLE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved)
{
BOOL ret = TRUE;
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
qInstallMsgHandler(myMessageHandler);
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
fBitmapManager *bmmManager = fr_get_bitmap_mgr();
if(bmmManager)
bmmManager->DeleteAllVFBs("defaultvfb");
}
break;
}
return ret;
}
BOOL APIENTRY DllMain(HANDLE hinstDLL, DWORD ul_reason_for_call, LPVOID lpReserved)
{
BOOL ret = TRUE;
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
qInstallMsgHandler(myMessageHandler);
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
fBitmapManager *bmmManager = fr_get_bitmap_mgr();
if(bmmManager)
bmmManager->DeleteAllVFBs("defaultvfb");
}
break;
}
return ret;
}
To copy to clipboard, switch view to plain text mode
As you see, nothing special...
There is interface functions for my dll:
bool RegisterPlugins(fPluginManager *plugMgr)
{
plugMgr->RegisterPlugin("vfb", "defaultvfb", VFBPluginModel::getInstance,0,0);
return TRUE;
}
bool UnRegisterPlugins(fPluginManager *plugMgr)
{
plugMgr->UnRegisterPlugin("vfb", "defaultvfb");
return TRUE;
}
extern "C" fplug_export fBool initializePlugins(fPluginManager *plugMgr)
{
return RegisterPlugins(plugMgr);
}
extern "C" fplug_export fBool uninitializePlugins(fPluginManager *plugMgr)
{
return UnRegisterPlugins(plugMgr);
}
bool RegisterPlugins(fPluginManager *plugMgr)
{
plugMgr->RegisterPlugin("vfb", "defaultvfb", VFBPluginModel::getInstance,0,0);
return TRUE;
}
bool UnRegisterPlugins(fPluginManager *plugMgr)
{
plugMgr->UnRegisterPlugin("vfb", "defaultvfb");
return TRUE;
}
extern "C" fplug_export fBool initializePlugins(fPluginManager *plugMgr)
{
return RegisterPlugins(plugMgr);
}
extern "C" fplug_export fBool uninitializePlugins(fPluginManager *plugMgr)
{
return UnRegisterPlugins(plugMgr);
}
To copy to clipboard, switch view to plain text mode
We interested in VFBPluginModel::getInstance code. This is a singletone wich creates an QApplication object.
Class definition:
class VFBPluginModel
: public QObject {
Q_OBJECT
public:
VFBPluginModel();
virtual ~VFBPluginModel();
static void *getInstance();
...
private:
VFBApplication a;
};
class VFBPluginModel : public QObject
{
Q_OBJECT
public:
VFBPluginModel();
virtual ~VFBPluginModel();
static void *getInstance();
...
private:
VFBApplication a;
};
To copy to clipboard, switch view to plain text mode
And creating:
VFBPluginModel::VFBPluginModel() : a(i, &name, this)
{
}
VFBPluginModel::VFBPluginModel() : a(i, &name, this)
{
}
To copy to clipboard, switch view to plain text mode
Code for VFBApplication class:
Q_OBJECT
public:
VFBApplication(int & argc, char ** argv, VFBPluginModel* plugin);
virtual ~VFBApplication();
...
};
VFBApplication
::VFBApplication(int & argc,
char ** argv, VFBPluginModel
* plugin
): QApplication(argc, argv
) mainWnd_
(NULL){
mainWnd_ = new MainWindow(appModel_);
mainWnd_->show();
}
class VFBApplication: public QApplication {
Q_OBJECT
public:
VFBApplication(int & argc, char ** argv, VFBPluginModel* plugin);
virtual ~VFBApplication();
virtual bool notify(QObject * obj, QEvent * event);
...
};
VFBApplication::VFBApplication(int & argc, char ** argv, VFBPluginModel* plugin): QApplication(argc, argv) mainWnd_(NULL)
{
mainWnd_ = new MainWindow(appModel_);
mainWnd_->show();
}
To copy to clipboard, switch view to plain text mode
Bookmarks