Поведение, которое вы указываете, предсказуемо, вы должны сначала знать, что если виджет станет видимым, ваши дети также будут видны.
Давайте проанализируем случай QTabWidget, этот виджет по сути является QTabBar + QStackedWidget,QStackedWidget управляет видимостью виджетов, и последний внутренне имеет QStackedLayout, который, когда он устанавливает, что определенный виджет должен отображаться, скрывает текущий виджет и показывает новый текущий виджет.Поэтому каждый раз, когда вы выбираете панель вкладок, отображаемый виджет будет вызывать метод show этого виджета (в вашем случае QTableWidget), и он сделает ваших детей видимыми, даже если они скрыты.
Так что если вы хотите, чтобы этоесли у вас есть потребность, которая работает так, как вы предполагаете, что обходной путь должен произойти, это сохранить состояние видимости в свойстве и в методе showEvent, чтобы применить изменения, если это необходимо.