从QDialog调用QMainWindow中的方法
我正在运行这个从主窗口显示对话窗口:
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”。 显然,我做错了。 任何想法如何从对话框调用主窗口中的方法?
connect(...)中的第三个参数需要是一个指向实例的指针。 只需更改HeaderList的构造函数的签名并添加SQLWindow作为参数(+将TheDarkKnight提到的使用更新的connect方法调用):
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();
}
链接地址: http://www.djcxy.com/p/39281.html