Connecting a a new signal/slot does not replace any existing signals/slots. If I understand what you're trying to do, you need to disconnect the signal/slot in run_main after you've connected the clicked signal with the run_next slot, otherwise, next button click, all connected slots will be called, which means your run_main slot would be invoked again, which I suspect is what you're encountering.