• 10643阅读
  • 18回复

qt窗口隐藏 [复制链接]

上一主题 下一主题
离线yaloml
 

只看楼主 倒序阅读 楼主  发表于: 2010-11-29
现在用 pa=new Musics();
             pa->show();
在一个主窗口里嵌套了另一个窗口(通过主窗口里的Button1),每次点击Button1就会新建一个窗口,如果希望不重复新建窗口而是再次点击按钮Button1,将窗口显示到最上端应该怎么实现??请高手详细讲解,或加我qq:1181027107,
离线yaloml

只看该作者 1楼 发表于: 2010-11-29
setWindowFlags(Qt::WindowStaysOnTopHint);的话主窗口就被hide了,有什么方法主窗口与新开窗口同时存在,且新窗口在最顶端,主窗口无法点击,
离线dbzhang800

只看该作者 2楼 发表于: 2010-11-29
引用第1楼yaloml于2010-11-29 10:17发表的  :
setWindowFlags(Qt::WindowStaysOnTopHint);的话主窗口就被hide了,有什么方法主窗口与新开窗口同时存在,且新窗口在最顶端,主窗口无法点击,

你顶楼和1楼是描述同一个问题么?

这儿你的描述似乎在告诉大家,你需要模态对话框,而你顶楼却没表达这个意思
离线yaloml

只看该作者 3楼 发表于: 2010-11-29
回 2楼(dbzhang800) 的帖子
第二个是摸索过程中试的,不管用.
主要是想实现不重复打开新窗口,而是每次点击button都可以将已打开的窗口放到最顶端.就可以了,新窗口,可以再调用hide.
离线water_wf

只看该作者 4楼 发表于: 2010-11-29
dbzhang800 ? 有qq没有,加你,方便交流
离线dbzhang800

只看该作者 5楼 发表于: 2010-11-29
只要你不重复创建它就不会重复打开。
离线water_wf

只看该作者 6楼 发表于: 2010-11-29
模态窗口即可
离线yaloml

只看该作者 7楼 发表于: 2010-11-29
回 5楼(dbzhang800) 的帖子
但是用pa=new Musics();
             pa->show();
会重复创建,用什么方法,可以不重复创建.
离线dbzhang800

只看该作者 8楼 发表于: 2010-11-29
Re:回 5楼(dbzhang800) 的帖子
引用第7楼yaloml于2010-11-29 10:32发表的 回 5楼(dbzhang800) 的帖子 :
但是用pa=new Musics();
             pa->show();
会重复创建,用什么方法,可以不重复创建.

自己想,怎么知道是否已经创建过。
离线yaloml

只看该作者 9楼 发表于: 2010-11-29
回 6楼(water_wf) 的帖子
不用模态窗口可以吗?
用pa=new Musics();
             pa->show();
会重复创建,用什么方法,可以不重复创建就可以了
离线yaloml

只看该作者 10楼 发表于: 2010-11-29
回 8楼(dbzhang800) 的帖子
设置一个bool,初始false,加个判断是否已有窗口,然后在检测isHidden,然后改下?
离线yaloml

只看该作者 11楼 发表于: 2010-11-29
回 8楼(dbzhang800) 的帖子
可是我两个都是继承QMainWindow的,其实就是两个程序相结合到一起.
离线love0105

只看该作者 12楼 发表于: 2010-11-29
把子窗口指针存起来,通过hide和show方法隐藏和显示,或者是用单例模式的方法
离线water_wf

只看该作者 13楼 发表于: 2010-11-29
这个方法也太多了,仔细多想想。
离线roywillow

只看该作者 14楼 发表于: 2010-11-29
Re:回 2楼(dbzhang800) 的帖子
引用第3楼yaloml于2010-11-29 10:27发表的 回 2楼(dbzhang800) 的帖子 :
第二个是摸索过程中试的,不管用.
主要是想实现不重复打开新窗口,而是每次点击button都可以将已打开的窗口放到最顶端.就可以了,新窗口,可以再调用hide.

C++ GUI Qt4那本书里有这个类似的例子,不妨参考一下,记得用了什么show、active之类的函数
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线yaloml

只看该作者 15楼 发表于: 2010-11-29
回 13楼(water_wf) 的帖子
void MainWindow::play()
{
    
    if(!pa)
    {
    pa=new Musics();
    pa->show();
    pa->raise();
    pa->activateWindow();
}
   else

    {

     pa->show();
     pa->raise();
     pa->activateWindow();
}

}


pa是新QMainWindow的指针,但是这样在调用的时候程序会崩溃...求指导..
离线roywillow

只看该作者 16楼 发表于: 2010-11-29
pa建议在构造函数中先初始化为0
以及if (!pa)后只要跟着一个pa=new XXX就好
相同的部分放到if外面一起执行
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线hellotk

只看该作者 17楼 发表于: 2010-12-01
回 15楼(yaloml) 的帖子
你这样可能多线程的问题,程序里有没有开别的线程?我也遇到过,你在对一个窗口raise之前首先要对qApp->lock(),加入互斥锁,操作完了再qApp->unlock()
离线qq867814126

只看该作者 18楼 发表于: 2011-03-01
初始化pa = NULL;
改为:
if(pa != NULL)
{
    pa->show();
}
else
{
    pa = new Music();
    pa->show();
}
快速回复
限100 字节
 
上一个 下一个