当前位置: 代码迷 >> QT开发 >> 窗体之间互相访问有关问题
  详细解决方案

窗体之间互相访问有关问题

热度:59   发布时间:2016-04-25 04:30:47.0
窗体之间互相访问问题
有两个窗体A和B。
A
C/C++ code
A::A{    CreatDockWindows();//创建停靠面板,面板中加载窗口B,在B中有控件p_gsTreeList和函数getTreeList();    B temp;    QTreeWidget * a = temp.getTreeList();//[color=#FF0000]访问B中的控件p_gsTreeList,为什么获取不了控件p_gsTreeList的指针?[/color]}//B中函数QTreeWidget * B::getTreeList(void){    return ui.p_gstTreeList;}

  QTreeWidget * a = temp.getTreeList();//访问B中的控件p_gsTreeList,为什么获取不了控件p_gsTreeList的指针?}


------解决方案--------------------
看样子你是想在主窗口中调用子窗口上面的控件。
ui好像是私有成员,不能直接调用的吧。
你可以使用信号槽,上面时候要用到那个控件的时候发个信号:
emit _signal(你的List的指针);
用到List的时候用一个槽:
_slot(QTreeList *list)
{
使用List
}

也可以别托控件了,用代码写,把它设置成public就行了
------解决方案--------------------
可以这样的:
在子窗口里加一个pulic的函数
void emit_signal()
{
emit _signal(ui->ListView);
}
在主窗口里加一个槽函数
_slot(QTreeList *list)
{
使用List
}
在主窗口构造的时候
先connect()连接信号槽
然后调用下子窗口的emit_signal函数
这样就会去响应父窗口的槽函数_slot
效果和你在主窗口中直接调用_slot(如果能直接使用控件的话)是一样的
你觉得呢

------解决方案--------------------
就是说你自己触发下信号,然后执行槽
和直接执行效果是一样的
但是你现在不能直接调用,所以就用这种间接的方法。

------解决方案--------------------
c++ 的话,你要先在a里初始化b,或者在b类里定义一个指针指向整个b类
b.h:
public:
static b *pb;
b.cpp:
b *b::pb=NULL;
构造函数内 最后一行写 pb=this;

a里调用b的成员:
申明a头文件,b::pb->xx();

明白了么
------解决方案--------------------
ui.p_gstTreeList 本身就是个指针,还赋值给指针。。。
以上可以直接就调用了
  相关解决方案