我正在运行它以显示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中调用主窗口中的方法?
答案 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();
}