gpt4 book ai didi

c++ - 在 Qt 中确定父窗体的类型

转载 作者:行者123 更新时间:2023-11-27 22:42:17 25 4
gpt4 key购买 nike

我有一个包含表 X 的数据库:我们称它为 clients。我还有一个与编辑表 X 内容相关的表格。当需要从表 X 中“挑选”记录时,它可能会自行打开(以浏览/编辑)以及其他形式。

我如何告诉父级,一个特定的 QModelIndex 已直接从 on_tableView_doubleClicked(const QModelIndex &index) 信号处理程序中挑选出来?

目前,我只有一个“父亲”形式,所以我知道将哪种类型的指针放入子形式(因此它可以保存指向父的指针)并且只是转换它类型的指针。

if (parent) daddy = qobject_cast<InvoiceEd*>(parent);

现在我想添加一个来自另一种形式的调用,我意识到我必须从 QWidget* 指针中转换出不同的指针,而且我不知道如何确定什么是“伪装的”在 QWidget* parent 指针下。我该怎么做?

最佳答案

我建议使用接口(interface)和dynamic_cast 来传递有关所选项目的信息:

InvoiceEdInterface.hpp:

class InvoiceEdInterface {
public:
virtual void SetSelectedItem (SelectedItemClass i_selected_item) = 0;
};

InvoiceEd.hpp:

class InvoiceEd: public InvoiceEdInterface {
public:
void SetSelectedItem (SelectedItemClass i_selected_item) override {
// Process setting selected item.
}
};

DataForm.hpp

class DataForm {
...
void on_tableView_doubleClicked(const QModelIndex &index) {
auto invoice_ed {dynamic_cast< InvoiceEdInterface* >(parent ())};

if (invoice_ed) {
invoice_ed->SetSelectedItem (...);
}
}
...
};

解决方案背后的想法非常简单:如果父窗口小部件实现了指定的接口(interface),则调用 SetSelectedItem()。否则,什么也不会发生。

但是请注意,建议的解决方案可能不是Qt-ish。使用 Qt,您可以添加一个信号来通知所选项目。当 DataForm 对象在父窗口小部件中创建以选择某个项目时,父窗口小部件应建立信号槽连接。此解决方案比上面提出的解决方案更灵活,因为它允许程序中的任何对象获取有关所选项目的信息。

所提出的两种解决方案都是动态工作的,不受基于模板的解决方案的限制。

关于c++ - 在 Qt 中确定父窗体的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744532/

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