2012-09-09 48 views
1

QT连接cilds按钮

class MainWindow : public QMainWindow { 

    Q_OBJECT 

    public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

    private slots: 
    void getData(); 

    private: 
    Ui::MainWindow *ui; 
    Dialog *second; 
}; 

class Dialog: public QDialog { 
    Q_OBJECT 

    public: 
    explicit Dialog(QWidget *parent = 0); QDialog * dialog; 

    QPushButton *pushButton; 
    QPushButton *pushButton_2; 

}; 

,我可以连接在课堂对话与功能的getData()类主窗口按钮(Dialog是类主窗口的孩子)

我试图

connect(*second->pushButton, SIGNAL(clicked()), this, 
          SLOT(getData())); 

但我得到了

error: no matching function for call to 
‘MainWindow::connect(QPushButton&, const char [11], MainWindow* const, const char [11])’ 

我该如何连接它们?

+1

请使用代码块代码,而不是引号。编辑器中有一个帮助框可以帮助你。 – Mat

+1

可能是这个职位将在您的帮助.. [StackOverflow上] [1] [1]:http://stackoverflow.com/questions/7180162/qt-no-matching-function-对于呼叫到mainwindowconnect – Tharanga

回答

0

如果对话框QMainWindow的子类的孩子(因为它是)你应该有这样的:

MainWindow::MainWindow(...) 
{ 
    .... 

    m_dialog = new Dialog(this);// in .h file it is defined as: "Dialog *m_dialog;" 
    .... 

    connect(m_dialog->pushButton, SIGNAL(clicked()), this,SLOT(getData())); 
} 

你不必写:

connect(*m_dialog->pushButton, SIGNAL(clicked()), this,SLOT(getData())); 

看看this qt代码:

Counter a, b; 
QObject::connect(&a, SIGNAL(valueChanged(int)), 
       &b, SLOT(setValue(int))); 

a.setValue(12);  // a.value() == 12, b.value() == 12 
b.setValue(48);  // a.value() == 12, b.value() == 48 

正如你所看到的,你必须使用指针而不是QObject。