I was able to get the behavior I was looking for by using the QPushButton instead of the QToolButton.
That's very hard to believe. The clicked(), released(), pressed(), and toggled() signals for QPushButton and QToolButton are all implemented by the base class QAbstractButton, so there is no difference in behavior between the two derived classes when it comes to those signals. QToolButton adds one more signal, triggered(), which is emitted when the QAction associated with the button is executed (i.e. the tool button is clicked), but you aren't using that feature in your code.