我有两个无模式对话框,两个都是从主窗口运行的。基本上,我试图通过从第一个按钮到第二个按钮传递一个字符串,但没有成功。 因此,两个对话框都在 mainwindow.h 中声明:
Dialog1 *dg1;
Dialog2 *dg2;
并在mainwindow.cpp中创建:
dg1 = new Dialog1(this);
dg2 = new Dialog2(this);
我需要通过调用更新dg2的textEdit的函数将字符串从dg1传递给dg2。我试过了:
#include "Dialog2.h"
...
Dialog2 dg2;
dg2.callfunction(string);
但没有迹象表明字符串到达那里。我该怎么做?
答案 0 :(得分:1)
有三种方法可以解决这个问题:
信号和插槽:为dialog1创建一个信号,为dialog2创建一个插槽。两者都必须有一个QString作为参数。在构建对话框的主窗口中连接它们。
通过setter建立关系:给dialog1一个接受指向dialog2的指针的setter。记住成员变量中的dialog2指针。使用该指针在dialog1中调用dialog2的callfunction。调用构造对话框的指针设置器。如果dialog2不再可用,请不要忘记清除指针,并在访问之前检查指针的有效性。
引用关系:将dialog2引用作为参数添加到dialog1的构造函数中。记住参与成员变量的参考。使用该引用在dialog1中调用dialog2的callfunction。您需要在dialog1之前构造dialog2来执行此操作。如果dialog2总是比dialog1长,那么这只能安全地工作。
您应该可以继续使用该信息。
我会选择1。
我建议您详细了解所需的基本原理。阅读Qt的信号和插槽。阅读有关C ++指针,引用和构造函数的信息。