主窗口有个控件,同时在主窗口show()了一个dialog。在这个dialog中复制主窗口的内容。

我在主窗口有一个widget或者其他控件,我在主窗口show()了一个dialog。我想在这个dialog中复制一个主窗口的内容。希望他们能共享数据,这样我在dialog或者主窗口上进行操作的时候,两边都会同时改变。
我刚开始用指针的方法并不能实现,不知道大家有没有什么好的办法呢?

其实不完全是这个意思。大概就是我在主窗口有一个QWidget,然后在出窗口show()出了一个新的dialog窗口,我在这个窗口中使用大概这样的句子:ui->widget->layout()->addwidget(); 吧主窗口的QWidget 给传进这个dialog了。但是原来的主窗口的QWIdget 就不见了。同理,我发现这个QWidget只能在一个地方显示一次。我希望它能在主窗口显示的同时,又能在子窗口的dialog中显示出来。按道理他们应该应该会共享一份数据,两边操作都会影响对方。

window.opener.document.getElementById 获取主窗口的内容。。

代码忘了用代码片段了。重新写下方便楼主看

父页面

 <script type="text/javascript">
    function myDialog(){
       var arr=new Array(2);//创建数据
       arr[0]="参数1";//添加参数
       arr[1]="参数2";//添加参数
       var url="dialog.html";//设置URL
       var layout="dialogWidth=500px;dialogHeight=25px;scroll=no;status=no;help=no;center=yes";//设置Dialog布局样式
       var son=window.showModalDialog(url,arr,layout);//设置son获取Dialog传递过来的值
       alert(son);//弹出返回值

    }
</script>

<input type="button" value="弹出对话框" onclick="myDialog()"/>

dialog

 <script type="text/javascript">
   function readParent(){
       var arr=window.dialogArguments;//获取父传递的数组
       for(var i=0;i<arr.length;i++){//遍历参数
       alert(arr[i]);//输出参数
      }
   }
  function result(){
    window.returnValue="设置子窗口返回的值";
    this.close();//关闭窗口
  }
</script>

<input type="button" value="关闭并返回参数" onclick="result()"/>
<input type="button" value="读取父窗口的参数" onclick="readParent()"/>

window.dialogArguments表示父窗口对象,
例如你想获取父窗口的id='userId'的值->window.dialogArguments.getElementById('userId').value;
然后如果是弹出层要传值给父窗口则使用,或者父窗口直接url带参传递也是可以的
window.returnValue="设置子窗口返回的值";
this.close();//关闭窗口
这样就可以传递了。

下面是完整的案例
父窗口:
<br> function myDialog(){<br> var arr=new Array(2);//创建数据<br> arr[0]=&quot;参数1&quot;;//添加参数<br> arr[1]=&quot;参数2&quot;;//添加参数<br> var url=&quot;dialog.html&quot;;//设置URL<br> var layout=&quot;dialogWidth=500px;dialogHeight=25px;scroll=no;status=no;help=no;center=yes&quot;;//设置Dialog布局样式<br> var son=window.showModalDialog(url,arr,layout);//设置son获取Dialog传递过来的值<br> alert(son);//弹出返回值</p> <pre><code>} </code></pre> <p>

弹出窗口:

function readParent(){ var arr=window.dialogArguments;//获取父传递的数组 for(var i=0;i<arr.length;i++){//遍历参数 alert(arr[i]);//输出参数 } } function result(){ window.returnValue="设置子窗口返回的值"; this.close();//关闭窗口 }


以上纯JavaScript技术实现。
另外如果传递的不是一个字符串而是别的比如object对象也是可以的。父窗口则使用son.属性名获取

window.local.innerHtml=parnet.body.innHtml; 再加一个setTimeout 来循环就行了

共用一个setting属性应该可以吧