C++ (Qt)virtual int Interface( int command, int message, void * ioData );
class RAILCORESHARED_EXPORT QAbstractRailItem : public QGraphicsObject, public QCommonRailItem{ Q_OBJECT bool fodd; //признак направления элемента (слева направо или наоборот)public: Q_INVOKABLE bool isOdd() const; virtual void executeCommand(const QString & commandName, const QVariant & params); virtual QVariant commandValue(const QString & commandValue);public slots: Q_INVOKABLE void setOdd(bool OddValue);
void QAbstractRailItem::executeCommand(const QString &commandName, const QVariant ¶ms){ if(commandName=="odd") setOdd(params.value<bool>());}QVariant QAbstractRailItem::commandValue(const QString &commandValue){ if(commandValue=="odd") return isOdd(); return QVariant();}
C++ (Qt)..switch (command) { case 'LOAD': ... break; case 'SAVE': ... break;}
C++ (Qt)typedef void (QAbstractRailItem ::* CMD_FUNC)(const QVariant & params);QMap <int, CMD_FUNC> theCommandMap;
C++ (Qt)typedef int TResultCode;virtual TResultCode executeCommand(int command, int param, const QVariant * inParams, QVariant * outParams); // а для удобства вызова можно попереливатьvirtual TResultCode executeCommand(int command, int param, const QVariant & inParams, QVariant & outParams){ return executeCommand(command, param, &inParams, &outParams);}
C++ (Qt)lamp.mIndex = map["lamp_index"]; // а его-то в мапе не было