来自QDialog的QMainWindow中的调用方法

时间:2016-05-11 08:09:37

标签: c++ qt qt5

我正在运行它以显示main的对话框窗口:

void SQLWindow::on_action_4_triggered()
{ 
   HeaderList window; 
   window.show(); 
   window.exec(); 
}

这里我试图将saveButtonClicked()连接到主窗口中的SLOT:

HeaderList::HeaderList(QWidget *parent) : QDialog(parent), ui(new Ui::HeaderList) 
{ 
   connect(this, SIGNAL(saveButtonClicked()), SQLWindow, SLOT(hideColumns())); 

   ui->setupUi(this); 
}

但是收到错误:“在','token'之前预期的primary-expression指向”SQLWindow“。显然,我做错了。如何从Dialog中调用主窗口中的方法?

2 个答案:

答案 0 :(得分:3)

connect(...)中的第三个参数需要是指向实例的指针。只需更改HeaderList构造函数的签名,并将SQLWindow添加为参数(+使用较新的connect方法调用,如提到的TheDarkKnight):

HeaderList::HeaderList(SQLWindow *parent) : QDialog(parent), ui(new Ui::HeaderList)
{
    connect(this, &HeaderList::saveButtonClicked, parent, &SQLWindow::hideColumns);

    ui->setupUi(this);
}

在头文件中,最好使HeaderList构造函数显式,而不是使用nullptr重载父类:

class HeaderList
{
public:
    explicit HeaderList(SQLWindow *parent);

    //...
};

将SQLWindow传递给你的HeaderList(并按照提到的thuga省略show()):

void SQLWindow::on_action_4_triggered()
{
    HeaderList window(this);
    window.exec();
}

答案 1 :(得分:3)

像这样连接信号:

class HeaderList
{
public:
    explicit HeaderList(QWidget *parent);

signals:
    void saveButtonClicked();
};

现在在SQLWindow

void SQLWindow::on_action_4_triggered()
{ 
   HeaderList window; 
   connect(&window, SIGNAL(saveButtonClicked()), this, SLOT(hideColumns()));
   window.exec(); 
}