I have an old codebase I started writing using the Qt 3.x framework—a little while before Qt4 was released. It’s still alive! I still work on it, keeping up-to-date with Qt and C++ as much as possible, and I still ship the product. Over the years I have moved the codebase along through Qt4 to Qt5, and on to compilers supporting C++11. One of the things I’ve sometimes found a little excessive is declaring slots for things that are super short and won’t be reused.
Here’s a simplified example from my older code that changes the title when a project is “dirty” (needs to be saved):
class myMainWindow ...
void _setTitle( const QString &inTitle );
connect( inProject, SIGNAL( signalDirtyChange( bool ) ),
SLOT( slotProjectDirtyChanged() ) );
QString name = mProject->name();
if ( mProject->dirty() )
name += '*';
_setTitle( name );
(Aside: If you are wondering about my naming convention, I developed a style when using Qt early on (c. 2000) where signals are named signalFoo() and slots are named slotFoo(). This way I know at a glance what the intent is. If I’m about to modify a slot function I might take an extra minute to look around since most IDEs can’t tell syntactically where it’s used in a
SLOT() macro. In this case you have to search for it textually.)
Thanks to C++11 lambdas and Qt’s ongoing evolution, these short slots can be replaced by a more succinct syntax. This avoids having to declare a method in your class declaration and shortens your implementation code. Both desirable goals!
Let’s take a look.