• 8548阅读
  • 11回复

[提问]qt 的mianwindow在屏幕中央 [复制链接]

上一主题 下一主题
离线zjfshowtime
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-18
我想使我的mianwindow在创建后就出现在屏幕中间,在resizeEvent中添加了如下代码
//重写了resizeEvent
void MainWindow::resizeEvent ( QResizeEvent * event ){
    int width = event->size().width();
     if(width > 250)
{
for(int i = 0; i < 6; i++)
if(docks == 0) continue;
            if(!docks->isHidden() &&//当前窗口
!docks->isFloating())
{
docks->setMinimumWidth(width - 350);//English -350, chinese -250
}
}
event->accept();
}
//主要出问题部分
QRect desttop_geom = QDesktopWidget().availableGeometry();
QRect mainwindow_geom = frameGeometry();
setGeometry(desttop_geom.width()/2 - mainwindow_geom.width()/2,                
desttop_geom.height()/2 - mainwindow_geom.height()/2,
mainwindow_geom.width(),mainwindow_geom.height());

在不是最大化的时候是没有问题的,可是当我将mianwindow全屏时,程序自动结束了,有哪位知道是什么情况不,给个解决方案呗,谢谢了!
离线zjfshowtime
只看该作者 1楼 发表于: 2011-09-05
果断还是没人回复啊
离线roywillow

只看该作者 2楼 发表于: 2011-09-05
说实话代码被斜体之后不好看懂……
我在进行居中的时候都是直接用desktopWidget和window的width()和height(),不清楚用geometry得到的值是不是一样

或许可以对最大化(你说的全屏意思是最大化吧)进行一下特殊处理?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线zjfshowtime
只看该作者 3楼 发表于: 2011-09-06
回 2楼(roywillow) 的帖子
//出问题 上面几行的代码,是处理最大化和恢复时候处理窗口大小。
下面的是将主窗体弹出时,在屏幕中间的代码,第一次加载的窗体 的时候是没问题的,可是当我最大化一次后,程序就出问题了,可能呢是两部分的代码有冲突了!
离线jdwx

只看该作者 4楼 发表于: 2011-09-06
回 3楼(zjfshowtime) 的帖子
窗口最大化后再还原,自己就在最大化前的地方,什么代码都不用。原来在哪还在哪。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线zjfshowtime
只看该作者 5楼 发表于: 2011-09-06
回 4楼(jdwx) 的帖子
我知道,你点击exe文件,弹出主窗体,想让这个主窗体在屏幕中央。当我点击最大化之后,上面代码就出错,程序自动退出了!
离线zjfshowtime
只看该作者 6楼 发表于: 2011-09-06
回 4楼(jdwx) 的帖子
如注释掉 “// 有问题”后面的代码的话,最大化也没问题,恢复也没问题的!加上就退出了!
离线jdwx

只看该作者 7楼 发表于: 2011-09-06
回 6楼(zjfshowtime) 的帖子
最大化就是满屏,没什么要设置大小的。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线dbzhang800

只看该作者 8楼 发表于: 2011-09-06
Re:回 4楼(jdwx) 的帖子
引用第6楼zjfshowtime于2011-09-06 11:22发表的 回 4楼(jdwx) 的帖子 :
如注释掉 “// 有问题”后面的代码的话,最大化也没问题,恢复也没问题的!加上就退出了!


注意看Manual

Warning: Calling resize() or setGeometry() inside resizeEvent() can lead to infinite recursion.
离线zjfshowtime
只看该作者 9楼 发表于: 2011-09-06
回 7楼(jdwx) 的帖子
我知道,但是我子窗体里面有很多其他的小窗体,要跟着变大,还要注意布局,所以需要上面的一段来控制的!下面的代码就是负责让窗体在屏幕中央,每次调试的时候,主窗体不在中央,我要要把它托过来,然后在操作很麻烦!所以才像这样做一下,但是还没做好!
离线zjfshowtime
只看该作者 10楼 发表于: 2011-09-06
回 8楼(dbzhang800) 的帖子
原来是这样啊!明白了!对了问你一下,你用过qwt绘制曲线么?麻烦看一下我的另一个关于qwt曲线的帖子吧!谢谢了!
离线zjfshowtime
只看该作者 11楼 发表于: 2011-09-13
回 2楼(roywillow) 的帖子
能否贴段代码看看,最后该如何设置它的位置值呢!谢谢了!
快速回复
限100 字节
 
上一个 下一个