Re: [@dxli and @sand1024] please a tip for the RS_Eventhandler
Posted by emanuel on Apr 12, 2025; 12:53am
URL: https://forum.librecad.org/fixed-thanks-please-a-tip-for-the-RS-Eventhandler-tp5726883p5726899.html
I'm not really making any progress.
I have a class:
class LC_OverlaySlideAction:public RS_ActionInterface {
public:
LC_OverlaySlideAction(
const char *name,
RS_EntityContainer &container,
RS_GraphicView &graphicView,
RS2::ActionType actionType = RS2::ActionNone);
~LC_OverlaySlideAction() override = default;
void init(int status) override;
void finish(bool updateTB = true) override;
void trigger() override;
void mouseMoveEvent(QMouseEvent* e) override;
void mousePressEvent(QMouseEvent* e) override;
void mouseReleaseEvent(QMouseEvent* e) override;
protected:
void drawOverlaySlide(const QString &fileName);
private:
bool middleButtonPressed{false};
};
but when I end the action with "ESC," RS_EventHandler::killAllActions() always calls RS_ActionInterface::finish(), never the overridden LC_OverlaySlideAction::finish().
Why doesn't this work? I have to reset values on finish.
Even weirder is, if I add just a virtual void bla() {} to the public: property of the RS_ActionInterface class, the entire LC crashes.
If I add it in different places, LC crashes in completely different places.
Once with QWidget attributes, or RS_Snapper.
Strange behavior.
class RS_ActionInterface : public RS_Snapper {
Q_OBJECT
public:
RS_ActionInterface(const char* name,
RS_EntityContainer& container,
RS_GraphicView& graphicView,
RS2::ActionType actionType = RS2::ActionNone);
~RS_ActionInterface() override;
virtual RS2::ActionType rtti() const;
void setName(const char* _name);
QString getName();
virtual void init(int status);
/* virtual void bla() {} <<<<<<< crashes QWidget attributes ??? */
virtual void mouseMoveEvent(QMouseEvent*);
virtual void mousePressEvent(QMouseEvent*);
virtual void mouseReleaseEvent(QMouseEvent*);
virtual void keyPressEvent(QKeyEvent* e);
virtual void keyReleaseEvent(QKeyEvent* e);
virtual void coordinateEvent(RS_CoordinateEvent*);
virtual void commandEvent(RS_CommandEvent*);
virtual QStringList getAvailableCommands();
virtual void setStatus(int status);
int getStatus() const;
virtual void trigger();
virtual bool isFinished() const;
virtual void setFinished();
virtual void finish(bool updateTB = true );
virtual void setPredecessor(RS_ActionInterface* pre);
void suspend() override;
void resume() override;
virtual void hideOptions();
virtual void showOptions();
/* virtual void bla() {} <<<<<<< crashes RS_Snapper ??? */
...