gpt4 book ai didi

c++ - 从 QDialog 调用 QMainWindow 中的方法

转载 作者:行者123 更新时间:2023-11-30 00:46:49 25 4
gpt4 key购买 nike

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

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);
}

但出现错误:“expected primary-expression before ',' token”指向“SQLWindow”。显然,我做错了。关于如何从对话框调用主窗口中的方法有什么想法吗?

最佳答案

connect(...) 中的第三个参数需要是指向实例的指针。只需更改 HeaderList 的构造函数的签名并将 SQLWindow 添加为参数(+ 使用 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();
}

关于c++ - 从 QDialog 调用 QMainWindow 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37156646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com