Another problem is that introducing too much virtual methods often exposes too much of implementation details.
Now about our specific example: I see LineEdit as "blackbox" with defined (and final) operations, which has "default interface" represented by current "Key" method and default menu.
If you want more than "default interface", simply change the interface part (that one is well defined in Ctrl).