2009-09-04 157 views
0

我写Qt中使用一个QStackedWidget组织向导的各个页面的向导式应用程序。现在我想切换页面之间,这应该是可能的使用功能setCurrentWidget(...)Qt不找QStackedWidgets'插槽setCurrentWidget

我有一个简单的主类实例化QWidget audioconfig。然后,它会将此QWidget的使用pageStack.addWidget(&audioconfig);一个QStackedWidget pageStack

后来,我想连接QStackedWidget的不同QWidget hubsetCurrentWidget(...)的某个信号以切换页面。然而,我的编译器的言论,

0Object ::连接:没有这样的插槽QStackedWidget :: setCurrentWidget(audioconfig)在/Users/paperflyer/Development/App/main.cpp:41`

有这两件事我没有在这里得到:

  • 显然有这样的功能。你可以在QStackedWidget的类定义中查找它。这里发生了什么?
  • 为什么是第一个字符的编译器输出一个“0”,而我的源代码清楚,正确显示为“Q”?

这里是整个代码:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc,argv); 
    QStackedWidget pageStack; 
    CHub hub; // inherits from CWidget 
    CAudioConfig audioconfig; // ditto 
    pageStack.addWidget(&hub); 
    pageStack.addWidget(&audioconfig); 

    // connect() is a custom signal of hub 
    QObject::connect(&hub, SIGNAL(configure()), &pageStack, SLOT(setCurrentWidget(&audioconfig))); 

    pageStack.setGeometry(100,100,700,500); 

    pageStack.show(); 
    return app.exec(); 
} 

与往常一样,非常感谢你的帮助!

回答

5

的QObject ::连接(&毂,SIGNAL(配置()),& pageStack,SLOT(setCurrentWidget(& audioconfig)));

将信号连接到信号/插槽时,连接签名。发射信号时传递实际参数。以上也许应该setCurrentWidget(QWidget*),但即便如此,它不会工作,因为信号的签名必须与插槽的一个相匹配。

注意:我认为如果信号的参数比插槽更多,它仍然可以工作,只要第一个参数相同即可。

+0

哎呀,打我吧,你谈到的参数不匹配。 +1 – Bill 2009-09-04 16:01:16

+0

是的,我最近也遇到过一些麻烦的事情:) – rpg 2009-09-04 16:09:52

+0

是的,你可以使用比发射的参数更少的参数。 – Bill 2009-09-04 17:08:04

3

您的连线错误。它应该是:

// connect() is a custom signal of hub 
QObject::connect(
    &hub,  SIGNAL(configure()), 
    &pageStack, SLOT(setCurrentWidget(QWidget *))); // <- change here 

您连接基于插槽和/或信号的原型。