Мои слоты не перечислены в редакторе сигналов / слотов Qt Creator - PullRequest
2 голосов
/ 09 декабря 2010

Я создал приложение Qt4 Gui.У меня есть главное окно.Я поместил QStackedWidget и два QPushButton в центральный виджет MainWindow.Я использую QtCreator в качестве своей IDE.

В прикрепленном изображении показанный составной виджет имеет две страницы, и две кнопки 1 и 2 предназначены для перехода к firstPage и SecondPage составного виджета соответственно.* Проблема 1: Когда я открыл редактор сигналов / слотов, я выбрал отправителя = button1 и сигнал = нажал, затем получатель = stackedWidget и slot =?,Предполагается, что это setCurrentIndex (), но его нет в выпадающем списке.

Проблема 2: alt text На правой панели объектов QtCreator есть пометка "Запрещенные символы".Я не знаю, почему эти символы там?Есть ли проблема?

Я прилагаю скриншот ниже.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 06 ноября 2011

Я тоже изучаю 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, но я не знаю, как еще это сделать.

...