首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

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

2012-09-29 
窗体之间互相访问问题有两个窗体A和B。AC/C++ codeA::A{CreatDockWindows()//创建停靠面板,面板中加载窗口

窗体之间互相访问问题
有两个窗体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 本身就是个指针,还赋值给指针。。。
以上可以直接就调用了

热点排行