Qt,子窗口某qt函数优先级暂停一段时间,主窗口不会暂停而正常运行

QT中修改程序主窗口标题用什么函数_百度知道
QT中修改程序主窗口标题用什么函数
假设主程序是Blank.cpp,那么只需要在main.cpp里面添加代码 B
w.setWindowTitle(&新的标题&);就可以了。 PS:
main.cpp的全部内容为:#include &blank.h&#include &QtGui/QApplication&int main(int argc, char *argv[]){ QApplication a(argc, argv); B w.setWindowTitle(&新的标题&); w.show(); return a.exec();}
其他类似问题
函数的相关知识
按默认排序
其他1条回答
使用QT编辑界面,其中带来很大方便的一点就是Qt中自带丰富的、种类齐全的类及其功能函数,程序员可以在编辑程序的过程中简单地直接调用。关于窗口关闭的操作,在这里指出常用的三个槽,即quit(),exit()以及close()。
首先说明窗口退出时,系统提示对话框的代码编辑。对主程序的退出,可以调用成员函数exit(),同时也可以调用槽quit(),二者此时都能起到关闭应用程序的作用。只是应注意二者调用的方式不同。如下程序示例:
QApplication*
app-&exit(0);
QApplication*
app-&quit();
此时二者是等价的,即void QApplication::quit ()等价于函数调用 QApplication::exit( 0 )。此时,若需要给出用户提示,则只需要在程序当中添加QMessageBox的消息判断语句,以提示用户是否确定退出应用程序。另外,quit()作为槽,也可以连接信号和槽的形式,响应某个信号后关闭应用程序。如:
QPushButton *quitButton = new QPushButton( &Quit& );
connect( quitButton, SIGNAL(clicked()), qApp, SLOT(quit()) );
如果关闭的不是应用程序,而是关闭窗口等部件的形式,则必须调用close()函数,已关闭部件。如下:
if (!(QMessageBox::information(this,tr(&CT Control View&),tr(&Do you really want to log out CT Control View?&),tr(&Yes&),tr(&No&))))
this-&close();
其中通过一条if语句,判断条件为一个对话框,根据用户的选择做出是否关闭该部件,this在这里代表当前窗口部件对象的地址。当用户选择“Yes”时,该窗口部件退出;反之则取消退出操作。
至此,我们已经简单了解了应用程序和窗口等部件的退出或关闭的代码编辑。然而,如果用户点击窗口右上角的X按键时,你会发现窗口仍然会在不给出任何提示的情况下直接退出了,即便你在程序当中已添加了提示的对话框语句。那为什么此时的关闭操作没有按我们希望的那样先给出提示对话框呢?原因是此时的关闭操作并没有引起调用带有提示消息的关闭或退出语句。当用户点击X关闭窗口时,系统会自动将这个事件告之某个特定的函数,即void QWidget::closeEvent ( QCloseEvent * e ),因此,这种情况应特别注意。在关闭窗口前,可先定义一条消息语句,以提示用户是否确定关闭窗口。如: void mainWindow::closeEvent( QCloseEvent * event ){
switch( QMessageBox::information( this, tr(&CT Control View&),
tr(&Do you really want to log out CT Control View?&),
tr(&Yes&), tr(&No&),
0, 1 ) ) {
event-&accept();
case 1: default:
event-&ignore(); }
编译程序后,系统会在用户响应close操作时,自动调用该语句。也许这个时候你还会问,上面的那个功能函数究竟是把它定义成槽呢,还是定义成成员函数。答案是二者都可以。一方面槽本身就是一个特殊的成员函数,除了能与信号连接之外,其功能与函数无异。另一方面,此时不需要额外设置连接信号和槽,添加该功能函数之后,窗口一旦有了close操作,机会立即响应该。
尽管添加closeEvent( QCloseEvent * event )这一功能函数之后,窗口会在关闭时给出提示对话框。但有时候还会发生这样一种情况:在点击确认关闭后,还会再会出现一个对话框,即提示对话框会出现两次。那这又是什么原因呢?其实很简单,那是因为closeEvent( QCloseEvent * event )只会响应close的操作,出现两次对话框无疑是在自定义的关闭函数中又添加一条提示对话框语句,确认关闭后,响应close操作,这时系统又会马上调用closeEvent( QCloseEvent * event )这个函数。因此,解决的办法是只定义一个带提示对话框的关闭函数,对不同的关闭操作都相应closeEvent( QCloseEvent * event )这个函数即可。
最后,如果想要在关闭主窗口或主程序时,所有打开的独立的子窗口都能同时被关闭。那么这个时候一般是在main.cpp文件中连接信号void QApplication::lastWindowClosed ();关于lastWindowClosed()的详细介绍,这里不作说明,需要使用时可以使用Qt Assistant查看其使用发法。如:int main( int argc, char ** argv ){
QApplication a( argc, argv );
ABMainWindow *mw = new ABMainWindow();
mw-&setCaption( &Qt Example - Addressbook& );
a.setMainWidget( mw );
mw-&show();
a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
int result = a.exec();}
这样,系统会在关闭主窗口部件时,同时关闭打开的其它子窗口程序。比较值得说明的是,并不是使用了a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) )这条语句后就一定能实现该功能。在此之前,必须特别注意是否设定了主窗口部件,即调用setMainWidget这一功能函数,这样,当关闭这一主窗口部件时,才会响应关闭这一时刻已打开的其它子窗口部件。
来自:求助得到的回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个暂停游戏的子函数,求大神指出错误_easyx吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:4,174贴子:
一个暂停游戏的子函数,求大神指出错误收藏
void pause(int &i)//鼠标识别暂停游戏{MOUSEMSGif(MouseHit()) {m =GetMouseMsg() ;switch(m.uMsg)
{case WM_LBUTTONDOWN:
if(m.x&670&&m.x&750&&m.y&120 &&m.y&180)
{setfillstyle(BLACK);
setcolor(WHITE);fillrectangle(670,
120, 830, 180);char zan[]="继续游戏";outtextxy(710,140,zan);i=1;}}}while(i){m =GetMouseMsg() ;switch(m.uMsg){case WM_LBUTTONDOWN:
if(m.x&750&&m.x&830&&m.y&120 &&m.y&180)
{setfillstyle(BLACK);
setcolor(WHITE); fillrectangle(670,
120, 830, 180);char zan[]="继续游戏";outtextxy(710,140,zan);i=0;}}}}
该函数写在主循环中。。但是怎么点都没反应。。
怎么没人啊。。。。。这个问题真解决不了。。。。。。。是这个子函数有问题还是整个主循环的问题啊
给出完整代码吧,这样没法调试的。
#include "stdafx.h"#include"graphics.h"#include"conio.h"#include"math.h"#include"stdio.h"#include"stdlib.h"#include "time.h"#include &process.h&void createmap()//绘制基本界面{for(i=0;i&610;i=i+30){line(0,i,600,i);line(i,0,i,600);}
line(31,0,31,600);line(29,0,29,600);char kai[]="开始游戏";outtextxy(710,60,kai);rectangle(
40, 830, 100);char guan[]="退出游戏";outtextxy(710,140,guan);rectangle(
120, 830, 180);char bang1[]="wsad控制白色的羊,躲避";char bang2[]="红色的狼,吃完绿草";char bang3[]="羊入羊圈(粗实线左),狼不可追入视为暂停。";char bang4[]="也可用空格键控制暂停,继续";outtextxy(605,500,bang1);outtextxy(605,520,bang2);outtextxy(605,540,bang3);outtextxy(605,560,bang4);}void createsheep(int &x,int &y)// 画羊{setfillstyle(WHITE);fillcircle(15*x, 15*y, 13);}void createwolve(int&a,int&b)//画狼{setfillstyle(RED);fillcircle(15*a, 15*b, 10);}void startexit(int&a0,int&b0,int&x0,int&y0,int&a,int&b,int&x,int&y,int&g0,int&g1,int&g2,int g3[60],int g4[60],int&g5,int&k,int&a3,int&b3,int&a2,int&b2)//鼠标识别开始结束继续游戏{MOUSEMSGm =GetMouseMsg() ;switch(m.uMsg){case WM_LBUTTONDOWN:
if(m.x&670&&m.x&830&&m.y&40 &&m.y&100){closegraph();initgraph();
createmap();k=0;
for(g5=0; g5&60; g5++)//画草{ g1=2*(rand()%19+2)-1; g2=2*(rand()%20+1)-1;
setfillstyle(GREEN);
fillcircle(15*g1, 15*g2,13);
setfillstyle(BLACK);
fillcircle(15*g1, 15*g2, 10);g3[g5]=g1;g4[g5]=g2;} g5=0; createwolve(a0,b0);
createsheep(x0,y0);
createwolve(a3,b3);a=a0;b=b0;x=x0;y=y0;a2=a3;b2=b3;}else if(m.x&670&&m.x&830&&m.y&120 &&m.y&180)
closegraph();
}} void pause(int &i)//鼠标识别暂停游戏{MOUSEMSGif(MouseHit()){m =GetMouseMsg() ;switch(m.uMsg){case WM_LBUTTONDOWN:
if(m.x&670&&m.x&750&&m.y&120 &&m.y&180){setfillstyle(BLACK);
setcolor(WHITE);fillrectangle(670,
120, 830, 180);char zan[]="继续游戏";outtextxy(710,140,zan);i=1;}}}while(i){m =GetMouseMsg() ;switch(m.uMsg){case WM_LBUTTONDOWN:
if(m.x&750&&m.x&830&&m.y&120 &&m.y&180){setfillstyle(BLACK);
setcolor(WHITE);fillrectangle(670,
120, 830, 180);char zan[]="暂停游戏";outtextxy(710,140,zan);i=0;}}}}
void wolveAmove(int&a,int&b,int&x,int&y)//狼A移动AI{if(abs(a-x)&abs(b-y)){
if((b-y)&0)
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);b+=2;
fillcircle(15*a, 15*b, 10);
{ setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
}}if(abs(a-x)&=abs(b-y)){
if((a-x)&0)
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
}}if(a&3){setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);setfillstyle(RED);
fillcircle(15*a, 15*b, 10);}}void wolveBmove(int&a,int&b,int&x,int&y)//狼B移动AI{if(abs(a-x)&abs(b-y)){
if((b-y)&0)
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);b+=2;
fillcircle(15*a, 15*b, 10);
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
}}if(abs(a-x)&=abs(b-y)){
if((a-x)&0) {
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);
setfillstyle(RED);
fillcircle(15*a, 15*b, 10);
}}if(a&3){setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b, 10);setfillstyle(RED);
fillcircle(15*a, 15*b, 10);}}
int main(int argc, char* argv[])//主函数{initgraph();IMAGEgetimage(&black,0,0,120,30);createmap();int i=0;int x=1,y=1, a=37,b=39,a2=39,b2=37,k=1;//狼羊运动量int g0=60,g1 , g2,g3[60],g4[60],g5=0;//草int x0=1,y0=1, a0=37,b0=39,a3=39,b3=37;//狼羊初始量char c=1;char bang[]="按空格键继续";char sjie[]="游戏胜利";char bjie[]="游戏失败";k=4;startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);while(true)//主循环{putimage(700,300,&black);if(MouseHit())startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);if(a==x&&b==y)//失败判定{k=1;setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a, 15*b , 15);setcolor(RED);
setfillstyle(RED);
fillcircle(15*a, 15*b, 15);}if(a2==x&&b2==y){k=1;setcolor(BLACK);
setfillstyle(BLACK);
fillcircle(15*a2, 15*b2, 15);
setcolor(RED);
setfillstyle(RED);
fillcircle(15*a2, 15*b2, 15);} for(g0=0;g0&60;g0++)//胜利判别{if(x==g3[g0]&&y==g4[g0]){g5++;g3[g0]=0;g4[g0]=0;}}if(g5==60) { outtextxy(710,300,sjie);k=2;}if(kbhit())c = getch();setcolor(BLACK);setfillstyle(BLACK);fillcircle(15*x, 15*y, 13);setcolor(BLACK);setfillstyle(WHITE);switch(c)//控制羊移动函数{ case ' ':k=3;
case 'a': x-=2; case 'A': x-=2;case 'd': x+=2; case 'S': y+=2;case 'w': y-=2; case 'W': y-=2;case 's': y+=2; case 'D': x+=2; case 1:}c=1;if(x&1)x+=2;if(y&1)y+=2;if(x&40)x-=2;if(y&40)y-=2;fillcircle(15*x, 15*y, 13);if(MouseHit())startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);int i1;i1++;if(i1&=1001)i1=0;if(i1%550==0){wolveAmove(a,b,x,y);wolveBmove(a2,b2,x,y);}setcolor(RED);while(k!=0 ){setcolor(WHITE); if(k==1)outtextxy(700,300,"游戏失败"); if(k==2)outtextxy(700,300,"游戏胜利");if(k==3)outtextxy(700,300,"按空格键继续");if(MouseHit())startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);if(kbhit()){char v=getch();switch(v){ case ' ':k=0;}}}} return 0;}
我简单弄了下,我觉得这个函数永远进不去(一开始没加while(1)),因为判断只是一瞬间,所以if(mousehit)没用,那自然下面这个while(i)就进不去了,所以我觉得这个函数没用到。在上面加个while(1)应该就好了。我改成这样是为了调试用的。。。。。。但愿正确理解了你的意思。。。。。。
pause 函数从来没有被调用过啊
int main(int argc, char* argv[])//主函数{initgraph();IMAGEgetimage(&black,0,0,120,30);createmap();int i=0;int x=1,y=1, a=37,b=39,a2=39,b2=37,k=1;//狼羊运动量int g0=60,g1 , g2,g3[60],g4[60],g5=0;//草int x0=1,y0=1, a0=37,b0=39,a3=39,b3=37;//狼羊初始量char c=1;char bang[]="按空格键继续";char sjie[]="游戏胜利";char bjie[]="游戏失败";k=4;startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);while(true)//主循环{putimage(700,300,&black);if(MouseHit())startexit(a0,b0,x0,y0,a,b,x,y,g0,g1,g2,g3,g4,g5,k,a3,b3,a2,b2);pause(i);if(a==x&&b==y)//失败判定{k=1;setcolor(BLACK); setfillstyle(BLACK); fillcircle(15*a, 15*b , 15);setcolor(RED); setfillstyle(RED); fillcircle(15*a, 15*b, 15);}
我觉得应设一个变量,并加上时间控制,测试代码如下:#include &graphics.h& void main(){ bool p= DWORD sT MOUSEMSG initgraph(640, 480); cleardevice(); sTime = GetTickCount(); srand(sTime); while(true){
if(MouseHit())
msg = GetMouseMsg();
switch(msg.uMsg)
case WM_LBUTTONDOWN:
if(GetTickCount()-sTime&500)
sTime = GetTickCount();
case WM_RBUTTONDOWN:
cleardevice();
closegraph();
FlushMouseMsgBuffer();
outtextxy(270,230,"Game Paused!!");
setcolor(GREEN);
circle(rand()%600+20,rand()%440+20,20);
Sleep(50);
cleardevice();
感谢各位大神的提携,我还是用我的键盘识别吧。。。。主要是作业已经上交了。。。。各位的意见我看了,确实受益匪浅。再次感谢。
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)_中华文本库
第1页/共2页
文本预览:
Qt 窗口中的一些小技术总结 //Qt 主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWinCE w.setWindowFlags(w.windowFlags()& ~Qt::WindowMaximizeButtonHint& ~Qt::WindowMinimizeButtonHint); w.showMaximized(); return a.exec(); } 这里的“&~”是取反以后再按位与的意思,下面的“|”是按位或的意思 //同时禁止最大化最小化按钮 Qt::WindowMinMaxButtonsHint //也禁止关闭 w.setWindowFlags(w.windowFlags() &~ (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint));
Qt 全屏显示函数 1、window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 2、yourwidget->setWindowFlags(Qt::window | Qt::FramelessWindowHint); (第一个 Qt::window 表示此 widget 是窗口类型,第二个参数使用无框架就是 没有标题,状态栏和边框) Qt 最大化显示函数 Qt 最小化显示函数 Qt 固定尺寸显示函数 window.showMaximized() window.showMinimized() window.resize(x,y)
子窗口全屏显示: QT 中窗口部件 QWidget 成员函数 showFullScreen();是用于将窗口部件 全屏显示,但是他只对窗口模式的部件有用。子窗口的特征是 Qt::SubWindow, 不是独立的窗口。因此对其调用 showFullScreen()无效。通过对对子窗口调 用:setWindowFlags(Qt::Dialog);或 setWindowFlags(Qt::Window);将 其设为窗口模式后,即可调用 showFullScreen();进行全屏显示了。
如果要还原为普通窗口, 调用 setWindowFlags(Qt::subwindow)将子窗口 设置为非顶级窗口,再调用 showNormal()还原子窗口显示。 参考: 相对于子窗口的全屏显示方法,不得不提的是子窗口退出全屏的方法。 MFC 中,子窗口退出全屏的方法简单直接,直接调用 SetWindowPos()函数 将子窗口显示到预定的位置即可。 QT 中,直接使用 move 和 resize 对窗口定位是没有效果的。需要先将子窗口设 位非窗口模式。之后再将窗口移到理想位置。 即先调用 setWindowFlags(Qt::Dialog);或者 setWindowFlags (Qt::SubWindow);在调用 move 和 resize 函数。 有人提到退出全屏时,调用 showNormal(),再调 setWindowFlags (Qt::SubWindow)。 这有两个问题:1)showNormal()也是只对顶级窗口有效。2)可以考虑先调 用 showNormal()将窗口设为原来大小,在将窗口设为子窗口模式。但这样窗 口回到父窗口之中也不会显示原来的大小。
获取屏幕宽度和高度 QApplication::desktop()->width() ; QApplication::desktop()->height() ; 即得到屏幕分辨率,如 *600.
10:58 Qt 主窗口没有最小化,最大化按钮且最大化显示 //Qt 主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv); TestQtForWinCE w.setWindowFlags(w.windowFlags()& ~Qt::WindowMaximizeButtonHint& ~Qt:
第1页/共2页
寻找更多 ""fortran&sleep函数&:一段时间暂停执行
该子例程的调用方式如下所示:
call sleep( itime )
itime:INTEGER*4 & &
&输入要休止的秒数
由于系统计时粒度影响,实际时间最多比 itime 少 1 秒钟。
INTEGER*4 time / 5 /
write(*,*) 'Start'
call sleep( time )
write(*,*) 'End'
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。3239人阅读
Qt全屏显示函数 & & & & window.showFullScreen()
Qt最大化显示函数 & & & & window.showMaximized()
Qt最小化显示函数 & & & & window.showMinimized()
Qt固定尺寸显示函数 & & & & window.resize(x,y)
子窗口全屏显示:
&& & & &将要全屏的Qt主窗口中的子窗口调用函数setWindowFlags(Qt::Dialog),然后调用showFullScreen()函数将子窗口全屏显示。也就是先将子窗口全屏显示前设置为顶级窗口,然后进行全屏显示。应为showFullScreen()函数只对顶级窗口有效。
&& & & &如果要还原为普通窗口,调用setWindowFlags(Qt::subwindow)将子窗口设置为非顶级窗口,再调用showNormal()还原子窗口显示。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28290次
排名:千里之外
原创:21篇
(3)(2)(1)(2)(9)(2)(11)

我要回帖

更多关于 qt函数优先级 的文章

 

随机推荐