qt 连接 cids 按钮

问题描述 投票:0回答:1

我有

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;

};

我可以将 Dialog 类中的按钮与 MainWindow 类中的 getData() 函数连接(Dialog 是 Mainwindow 类的子类)

我试过了

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])’

如何连接它们?

qt parent-child
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。

© www.soinside.com 2019 - 2024. All rights reserved.