Ваша проблема в том, что вы вызываете setupUi
как в конструкторе MainWindow
, так и в конструкторе FloatSlider
. Но FloatSlider
не имеет своей собственной части пользовательского интерфейса, она наследует от MainWindow
.
Итак, вы настраиваете пользовательский интерфейс в конструкторе MainWindow
и устанавливаете соединение. Затем в конструкторе FloatSlider
, который следует после завершения конструктора MainWindow
, вы снова вызываете setupUi
, который перезаписывает объекты пользовательского интерфейса (или, скорее, соответствующие указатели, так как все компоненты динамически создаются) новыми, которые сейчас не имеют связи. Вот почему это работает, когда вы вызываете connect
и в конструкторе FloatSlider
. Но, конечно, это все же создает утечку памяти (объекты из первого вызова setupUi
теряются). На самом деле старые объекты могут быть очищены Qt, потому что они все еще имеют this
в качестве родителя, но они просто бесполезны, так как они либо никуда не деваются (если окно имеет макет верхнего уровня, который перезаписывается в setupUi
вместо добавленного) или они дублируются (если окно не имеет разметки верхнего уровня).
Так что просто удалите этот вызов setupUi
из конструктора FloatSlider
. Поскольку MainWindow
наследуется от Ui::MainWindow
, а FloatSlider
не добавляет ничего, о чем setupUi
заботится, MainWindow
несет ответственность за вызов setupUi
.