我创建了一个Qt4 Gui应用程序。我有主窗口。我在MainWindow的中央窗口小部件上放了一个QStackedWidget和两个QPushButtons。我使用QtCreator作为我的IDE。
在附图中,显示的堆叠小部件有两个页面,两个pushButtons 1和2分别用于导航到堆叠小部件的firstPage和SecondPage。
问题1: 当我打开信号/插槽编辑器时,我选择了sender = button1并且signal = clicked,那么receiver = stackedWidget和slot =? 。它应该是setCurrentIndex(),但它没有在下拉列表中列出。
问题2: 在QtCreator的右侧对象面板中标有“拒绝符号”。我不知道为什么那些符号在那里?有什么问题吗?
我附上下面的截图。如果需要更多详细信息,请告诉我们。
答案 0 :(得分:0)
我也在学习QT和QT Designer,并遇到了同样的问题。对互联网的坚定搜索揭示了其他几个有同样问题但没有答案的人。你认为那里有人会解释它。叹息。
无论如何,问题在于按钮发送的信号与堆叠小部件上的“setCurrentIndex(int)”插槽的签名不匹配,因此“setCurrentIndex(int)”不会显示当人们试图使用按钮“clicked()”信号时,在菜单中。也就是说,“clicked()”没有参数,“setCurrentIndex(int)”只有一个整数参数,因此它们有不同的签名。
在我的项目中,我尝试将菜单项连接到堆叠小部件,以便在选择菜单项时显示其中一个包含的小部件。菜单项只有“triggered()”信号,没有“triggered(int)”信号,QStackedWidget的“setCurrentIndex(int)”插槽期望信号在其签名中有一个整数参数。
换句话说,你不能直接做你想做的事。
以下是我在代码中解决的问题。请记住,我正在使用MonoDevelop(在Linux下进行C#开发)和Qyoto(这是Qt的C#接口)在C#中编写我的Qt应用程序。
创建主窗口(并将其分配给名为“layout”的变量)后,我这样做了:
QObject.Connect (layout.someMenuItem, SIGNAL("triggered()"), showSomeView);
这会导致我的菜单项在触发时调用showSomeView()函数。
然后我写了public void showSomeView()
{
layout.stackedWidget.SetCurrentWidget(layout.someView);
}
现在它就是我的意思!
项目语言中的解决方案应与此类似。不幸的是,信号/插槽连接必须在代码中设置,而不是在QT Designer的GUI中设置,但我不知道如何做到这一点。