connect(…)中的第三个参数需要是指向实例的指针。只需更改HeaderList构造函数的签名并添加SQLWindow作为参数(+使用TheDarkKnight提到的较新的连接方法调用):
我运行这个程序是为了显示来自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);
}
但是得到了一个错误:"在','标记之前应该有主表达式",它指向"SQLWindow"。很明显,我做错了。有什么想法可以从对话框调用主窗口中的方法吗?
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();
}
以其他方式连接信号,如下所示:
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();
}