2013-01-03 31 views
1

新手在這裏,我在主窗口中放置了一個碼頭小部件,並且在此碼頭小部件面板中有一個按鈕,現在我想連接,此按鈕帶有一個在主窗口,它拋出一個錯誤,我該怎麼辦?由於錯誤碼頭小部件中的QPushButton無法訪問

connect 
(
    perfectPanel_->btn_AAA, 
    SIGNAL(clicked()), 
    this, 
    SLOT(on_actionAAA_triggered()), 
    Qt::UniqueConnection 
); 

錯誤消息

$PWD/ui_perfectPanel.h: In constructor ‘xixi::xixi()’: 
$PWD/ui_perfectPanel.h:71:18: error: ‘QPushButton* Ui_perfectPanel::btn_AAA’ is inaccessible 
$PWD/xixi/xixi.cpp:51:25: error: within this context 

請注意,我已經成功地與這在主窗口(xixi.cpp)工具欄按鈕連接,它的偉大工程。

回答

1

這是因爲您的船塢類,perfectPanel,私自從生成UI類Ui::perfectPanel繼承:

class perfectPanel : public QWidget, private Ui::perfectPanel 

也許你認爲繼承公開的,但是不應該。相反,你應該讓perfectPanel類的信號部分,和路由內部信號從按鈕到外部信號:

class perfectPanel ... { 
... 
signals: 
    void AAA_clicked(); 
}; 

perfectPanel::perfectPanel() { 
    setupUi(this); 
    connect(btn_AAA, SIGNAL(clicked()), this, SIGNAL(AAA_clicked())); 
} 

(而如果你要問,是的,你可以連接2個信號一起)。

然後你只需連接新的信號你的主窗口類中:

connect(perfectPanel_, 
    SIGNAL(AAA_clicked()), 
    this, 
    SLOT(on_actionAAA_triggered()), 
    Qt::UniqueConnection 
); 
+0

太好了!它現在有效。哈哈非常感謝 – Daniel