1

I have

class MainWindow : public QMainWindow  { 

    Q_OBJECT

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

  private slots:
    void getData();

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

and

class Dialog: public QDialog  {
   Q_OBJECT

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

    QPushButton *pushButton;
    QPushButton *pushButton_2;

};

and I can connect pushbuttons in class Dialog with function getData() in class MainWindow (Dialog is a child of class Mainwindow)

I tried

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

but I got

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

How do i connect them?

4

1 に答える 1

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()));

この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 ではなくポインターを使用する必要があります。

于 2012-10-16T15:45:25.740 に答える