Я тоже изучаю QT и QT Designer, и столкнулся с той же проблемой. Решительный поиск в Интернете показал несколько других людей с тем же вопросом, но без ответов. Вы могли бы подумать, что кто-то уже объяснил бы это сейчас. Вздох.
В любом случае, проблема в том, что сигналы, посылаемые кнопками, не совпадают с сигнатурой слота setCurrentIndex (int) в стековом виджете, поэтому setCurrentIndex (int) не отображается в меню, когда вы пытаетесь использовать сигнал кнопки «clicked ()». То есть «clicked ()» не имеет параметров, а «setCurrentIndex (int)» имеет один целочисленный параметр, поэтому они имеют разные подписи.
В моем проекте я пытался соединить пункты меню со сложенным виджетом, чтобы один из содержащихся в нем виджетов отображался при выборе пункта меню. Пункты меню имеют только сигнал «triggered ()», сигнала «triggered (int)» нет, а слот «setCurrentIndex (int)» QStackedWidget ожидает сигнал с единственным целочисленным параметром в своей сигнатуре.
Другими словами, вы не можете делать то, что хотите, напрямую.
Вот как я решил это в своем коде. Помните, что я пишу свое приложение Qt на C #, используя MonoDevelop (для разработки на C # под Linux) и Qyoto (который является интерфейсом C # для Qt).
После создания моего главного окна (и присвоения его переменной с именем "layout") я сделал это:
QObject.Connect (layout.someMenuItem, SIGNAL("triggered()"), showSomeView);
Это заставляет мой пункт меню вызывать функцию showSomeView () всякий раз, когда она срабатывает.
Я тогда написал
public void showSomeView()
{
layout.stackedWidget.SetCurrentWidget(layout.someView);
}
Теперь он делает то, что я имею в виду!
Решение на языке вашего проекта должно быть похоже на это. К сожалению, соединения сигнал / слот должны быть установлены в коде, а не в графическом интерфейсе QT Designer, но я не знаю, как еще это сделать.