2009-09-04 159 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 

您連接基於插槽和/或信號的原型。