注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

轻松度过每一天

真的猛士敢于直面惨淡的人生,敢于正视淋漓的鲜血,这是怎样的哀痛者和幸福者!!

 
 
 

日志

 
 
关于我

When you are young, you may want several love experiences. But as timegoes on, you will realize that if you really love someone, the wholelife will not be enough. You need time to know, to forgive and to love.All this needs a very big mind.

网易考拉推荐

qt弹出窗口的办法,解决办法  

2013-05-04 00:40:38|  分类: c++、程序 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

解决方法:

 

1:用Qtcreator创建一个工程命名为Widget,创建.ui文件并添加相关控件,以添加pushButton为例

 

2:新创建一个Dialog文件,在dialog.ui文件中创建对话框。

 

3:实现点击pushButton弹出dialog对话框,在widget工程下添加dialog.h,dialog.cpp,dialog.ui,ui_dialog.h,并在widget.h文件中添加#include “dialog.h”。

 

4:在widget.h文件中添加private slots: void  on_pushButton_clicked();    在private中声明: Dialog  *clickPushButton 。

 

5:在widget.cpp文件中添加如下代码:

     void  Widget::on_pushButton_clicked()  

  {

            clickPushButton  = new Dialog(this);

            clickPushButton->show();

  } 

 

实现结果:点击pushButton按钮,弹出Dialog对话框。

编译通不过????????有办法,把宏定义去掉

但去掉以后又出问题了,不能用图型方法建立槽函数了,这样的话,再看下面

实现过程:
两种窗口打开方式:
一是自身消失而后打开另一个窗口,二是打开另一个窗口而自身不消失
第一种:
1.首先新建Qt4 Gui Application工程,工程名为MainWindow,Base class选为QWidget。
2.为工程添加新文件,选择Qt->Qt Designer Form Class,新建对话框类,选择Dialog without Buttons,命名为MyDialog。
3.在MyDialog.ui中拖入一个Push Button,将其上的文本改为“进入主窗口”,右键go to slot建立槽函数,其中,Sender设为pushButton,Signal设为clicked(),Receive设为 MyDialog,Slot设为accept()。这样就实现了单击这个按钮使这个对话框关闭并发出Accepted信号的功能,下面我们将利用这个信号。
4.修改主函数main.cpp,如下:

#include <QtGui/QApplication>
#include “MainWindow.h”
#include “MyDialog.h”       //加入头文件
int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
     MainWindow w;
     MyDialog my1;       //建立自己新建的类的对象my1
     if(my1.exec()==QDialog::Accepted)    //利用Accepted信号判断pushButton是否被按下
     {
         w.show();         //如果被按下,显示主窗口
         return a.exec();       //程序一直执行,直到主窗口关闭
     }
         else return 0;     //如果没被按下,则不会进入主窗口,整个程序结束运行
}

主函数必须这么写,才能完成所要的功能。

如果主函数写成下面这样:

#include <QtGui/QApplication>
#include “MainWindow.h”
#include “MyDialog.h”
int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
     MyDialog my1;
     if(my1.exec()==QDialog::Accepted)
     {

         MyDialog w;//w是在if语句里定义的,所以当if语句执行完后它就无效了
         w.show();
     }
     return a.exec();
}
这样导致的后果就是,按下pushButton后,主界面窗口一闪就没了。如果此时对程序改动了,再次点击运行时,就会出现error: collect2: ld returned 1 exit status的错误。这是因为虽然主窗口没有显示,但它只是隐藏了,程序并没有结束,而是在后台运行。所以这时改动程序,再运行时便会出错。你可以按下调试栏上面的红色 Stop停止按钮来停止程序运行。你也可以在windows任务管理器的进程中将该进程结束,而后再次运行就没问题了,当然先关闭Qt Creator,而后再重新打开,这样也能解决问题。

如果把程序改为这样:

#include <QtGui/QApplication>
#include “MainWindow.h”
#include “MyDialog.h”
int main(int argc, char *argv[])
{
     QApplication a(argc, argv);
     MyDialog my1;
     Widget w;
     if(my1.exec()==QDialog::Accepted)
     { 
          w.show();
     }
     return a.exec();
}

这样虽然解决了上面主窗口一闪而过的问题,但是,如果在my1对话框出现的时候不点enterBtn,而是直接关闭对话框,那么此时整个程序应该结束执行,但是事实是这样的吗?如果你此时对程序进行了改动,再次按下run按钮,你会发现又出现了error: collect2: ld returned 1 exit status的错误,这说明程序并没有结束,我们可以打开windows任务管理器,可以看到我们的程序仍在执行。
因为
return a.exec();一句表示只要主窗口界面不退出,那么程序就会一直执行。所以只有用第一种方法,将该语句也放到if语句中,而在else语句中用else return 0; ,这样如果enterBtn没有被按下,那么程序就会结束执行了。到这里,就实现了一个界面结束执行,然后弹出另一个界面的程序。

第二种:
下面在主窗口上加一个按钮,按下该按钮,弹出一个对话框,但这个对话框关闭,不会使主窗口关闭。
在主窗口加入按钮,显示文本为“弹出一个对话框”,在其上点击鼠标右键,在弹出的菜单中选择go to slot,选择单击事件clicked(),我们在弹出的槽函数中添加一句:my2.show();
my2为我们新建对话框类的另一个对象,但是my2我们还没有定义,所以在MyDialog.h文件中添加相应代码,如下,先加入头文件,再加入my2的定义语句,这里我们将其放到private里,因为一般的函数都放在public里,而变量都放在private里。

#ifndef WIDGET_H

#define WIDGET_H

#include <QtGui/QWidget>

#include “MyDialog.h”    //包含头文件

namespace Ui

{

     class MainWindow;

}

class MainWindow : public QWidget

{

     Q_OBJECT

     public:

     MainWindow(QWidget *parent = 0);

     ~ MainWindow();

private:

     Ui:: MainWindow *ui;

     MyDialog my2;       //对my2进行定义

     private slots:

     void on_pushButton_clicked();

};

#endif // WIDGET_H

到这里,再运行程序,便能完成我们实验要求的功能了。整个程序里,我们用两种方法实现了信号和槽函数的关联,第一个按钮我们直接在设计器中实现其关联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是一样的。

转自百度空间:醒了么?

  评论这张
 
阅读(3976)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017