标题:qt2多窗口编程
作者:weller_huang
日期:2010-11-03 22:13
内容:
我目前在2440上学习QT。有一个问题想请教大家:
1。我有两个窗口A, B.默认程序起来时,显示的是A。按下A上的一个按钮,显示B窗口。
这个我目前已经实现,我想知道的是,B中如何获得A的指针?
我现在A中是通过在class A中定义个class B的指针来实现显示B的。就是bp= new B();
那么B中我如何得到A的指针呢?
2。bp= new B();和bp= new B(this);的区别看上去是一个没有父窗口,一个有父窗口。
编程使用哪个会比较好?
3。A如何获取B关闭的事件,从而让这个事件触发A来做一些事情 ?
#1 [hqd_2008 11-07 20:40]
这是screen管理的问题吧,
要看你自己怎么做了
#2 [kongfuziyue 04-15 09:14]
不能沉
#3 回 楼主(weller_huang) 的帖子 [dragonfever 04-17 11:25]
楼主的pd=new B();具体是怎么定义的啊?能不能把源代码发上来参考下先
我是QT新手,现在正在设计一个同楼主类似的两窗口程序,在窗口1的nextButton上点击实现进入窗口2,我参考楼主的方法在窗口一的widget类中定义窗体2的指针如下:
dialogform *pd=new dialogform();
其中dialogform是我的第二个窗口的类名,然后在槽on_nextButton()中这样定义:
this->hide();
pd->show();
结果编译显示错误信息如下:
mainwinform.h:34: error: ‘new’ cannot appear in a constant-expression
mainwinform.h:34: error: ISO C++ forbids initialization of member ‘pd’
mainwinform.h:34: error: making ‘pd’ static
mainwinform.h:34: error: invalid in-class initialization of static data member of non-integral type ‘dialogform*’
make: *** [.obj/main.o] 错误 1
请教各位大侠指点迷津!
#4 回 3楼(dragonfever) 的帖子 [dragonfever 04-17 12:30]
问题解决!
不应该在窗体1的mainwinform.h中声明pd指针,而是在槽函数定义头文件mainformwin.ui.h中声明,修改后的mainwinform.ui.h内容如下:
#include "dialogform.h"
void mainwinform::on_nextButtonclicked()
{
dialogform* pd;
pd=new dialogform(this);
hide();
pd->show();
}
现在编译通过,在qvfb中运行基本达到窗口跳转的效果,但运行时终端显示如下错误:
......
Semop lock failure 标识符已删除
Semop unlock failure 标识符已删除
root@ubuntu:/home/lf/qt-sqlite/test# Semop lock failure 无效的参数
Semop unlock failure 无效的参数
Semop lock failure 无效的参数
......
不知道是不是使用指针造成的,疑惑中...
不晓得怎么回事,第三次运行时,就没有出现这些类似的信息,运行很成功,感叹程序真是个诡异的存在。。。
#5 [mmofan 05-04 20:48]
楼主,可以把源码给我发一份吗,我只想实现“我有两个窗口A, B.默认程序起来时,显示的是A。按下A上的一个按钮,显示B窗口。”这个功能,实在不知道如何在程序中调用designer创建的ui文件,先谢楼主了,邮箱:zuotianyiji@163.com,再次感谢!!!!