-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbasics.cpp
More file actions
142 lines (134 loc) · 4.09 KB
/
basics.cpp
File metadata and controls
142 lines (134 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//-----本文件是对于basics.h中定义的类的实现部分-----
#include "basics.h"
#include "globalVar.h"
//ParametersStru
bool ParametersStru::operator !=(const ParametersStru &par)
{
if(intVar==par.intVar&&
floatVar==par.floatVar&&
StringVar==par.StringVar&&
boolVar==par.boolVar&&
VideoPlayerVar==par.VideoPlayerVar&&
GraphicsViewVar==par.GraphicsViewVar&&
CaluThreadVar==par.CaluThreadVar&&
AnimationTypeVar==par.AnimationTypeVar&&
PixmapVar==par.PixmapVar&&
ItemVar==par.ItemVar&&
MusicPlayerVar==par.MusicPlayerVar&&
GraphicsSceneVar==par.GraphicsSceneVar&&
KeyVar==par.KeyVar)
{return false;}
return true;
}
ParametersStru& ParametersStru::operator =(const ParametersStru &par)
{
intVar=par.intVar;
floatVar=par.floatVar;
StringVar=par.StringVar;
boolVar=par.boolVar;
VideoPlayerVar=par.VideoPlayerVar;
GraphicsViewVar=par.GraphicsViewVar;
CaluThreadVar=par.CaluThreadVar;
AnimationTypeVar=par.AnimationTypeVar;
PixmapVar=par.PixmapVar;
ItemVar=par.ItemVar;
MusicPlayerVar=par.MusicPlayerVar;
GraphicsSceneVar=par.GraphicsSceneVar;
KeyVar=par.KeyVar;
return *this;
}
ParametersStru::ParametersStru(const ParametersStru &par):QObject(0)
{
intVar=par.intVar;
floatVar=par.floatVar;
StringVar=par.StringVar;
boolVar=par.boolVar;
VideoPlayerVar=par.VideoPlayerVar;
GraphicsViewVar=par.GraphicsViewVar;
CaluThreadVar=par.CaluThreadVar;
AnimationTypeVar=par.AnimationTypeVar;
PixmapVar=par.PixmapVar;
ItemVar=par.ItemVar;
MusicPlayerVar=par.MusicPlayerVar;
GraphicsSceneVar=par.GraphicsSceneVar;
KeyVar=par.KeyVar;
}
//ExpansionSlot
void ExpansionSlot::call(ParametersStru par)
{
if(this->parslot!=nullptr)
{
this->parslot(par);
return;
}
if(this->voidslot!=nullptr)
{
this->voidslot();
return;
}
QJSValue ret=MainJSVM->globalObject().property(slotname);
ret.call(QJSValueList());
}
//CaluThread
void CaluThread::run()
{
if(this->fun!=NULL_String)
{
//不是在runfun里调用的,也就是说必然是非扩展事件,直接通过原生槽执行
QByteArray ba = fun.toLatin1();
const char *function = ba.data();
if(par!=NULL_ParametersStru)
{QMetaObject::invokeMethod(thob,function,synchronization,Q_ARG(ParametersStru,par));}
else
{QMetaObject::invokeMethod(thob,function,synchronization);}
return;
}
else
{
//扩展事件
if(!this->track) //检查是否是非追踪调用
{QObject::connect(this,SIGNAL(finished()),this,SLOT(playFinished()));} //线程函数执行完毕立刻销毁
this->exfun->call(par);
}
return;
}
void CaluThread::playFinished()
{delete this;}
//独立函数
ExpansionSlot* FindExpansionSlot(String slotfun)
{
int expansion_slot_len = AllExpansionSlot.length();
for (int i = 0; i < expansion_slot_len; ++i) {
ExpansionSlot *slot = AllExpansionSlot.at(i);
if(slot->getslotname()==slotfun) //确定找到
{return slot;}
}
return nullptr;
}
void RunFun(String slotfun, ParametersStru par, ExecutionMode CT, bool expansion)
{
if(expansion) //注意,不存在同名的槽,所以能找到就直接返回
{
//扩展调用
ExpansionSlot *slot=FindExpansionSlot(slotfun);
if(slot!=nullptr)
{
if(CT==asynchronous) //如果是异步
{
//注意,异步扩展槽不能使用引擎接口
CaluThread *thread=new CaluThread(slot,par,false);
thread->start();
}
else
{slot->call(par);} //同步直接执行就好了
return;
}
}
//非扩展调用
QByteArray ba = slotfun.toLatin1();
const char *function = ba.data();
if(par!=NULL_ParametersStru)
{QMetaObject::invokeMethod(thob,function,CT,Q_ARG(ParametersStru,par));}
else
{QMetaObject::invokeMethod(thob,function,CT);}
}