linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > article > Linux开发区 > 软件开发 >
栏目导栏
资料搜索
热门文章
·Linux 下 C 语言编程
·Linux下的通用线程池创建
·C++字符串转换篇
·linux C 进程操作篇
·linux上的C/C++编译器gcc/egcs
·linux C 文件权限控制篇
·GCC使用手册
·linux C 接口处理篇
·在Redhat Linux上安装 GCC 编译
·GCC使用指南
·C语言运算符
·Linux下C开发环境的构成和安装
·fopen()函数的参数说明
·GCC使用手册与常用命令
·Scheme 语言介绍
最新文章
·在Ubuntu Linux 8.04上构建GCC
·Linux操作系统下Socket编程地址
·将VC程序移植到Linux系统的几点
·Linux下malloc/free与new/dele
·Linux下用GTK和socket实现简单
·Linux操作系统下让Tomcat启动在
·Linux操作系统中如何编译C程序
·几种常被人们忽略的Linux系统下
·Eclipse编程工具 在Ubuntu下的
·Linux操作系统下的网络地址转换
·老手经验谈:Linux驱动程序开发
·Linux操作系统多线程同步Mutex
·Linux操作系统下C程序语言简易
·Linux系统平台下关于GCC编译及
·解决Linux系统下管道被接受方关
Google
 
Linux下QT图形界面开发--信号和槽
[ 作者:  加入时间:2007-09-27 11:46:31  来自:Linux联盟收集整理 ]

一、信号和槽

Qt的一项重要的机制就是它的信号和槽,在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说系统对象进行通信.一般的图形用户编程中采用回调函数进行对象间通信(如:gtk+),这样回调函数和处理函数捆绑在一起,但这样做没有信号和槽机制简便和灵活.

如Qt的窗口部件有多个预定义的信号,槽是一个可以被调用处理特定信号的函数.Qt的窗口部件有多个预定义的槽,当一个特定的时候发生的时候,一个信号被发射,对信号感兴趣的槽就会调用对应响应函数.

二、信号应用实例

下面我们用一个实例来了解信号的用法.

首先我们新建一个文件夹:

#mkdir /root/Desktop/qt/signal

我们打开Qt创建项目,项目路径为 /root/Desktop/qt/signal/signal.pro

从菜单栏的 File->New 打开新建对话框,选择第二个:Dialog,然后也同样保存到刚刚创建的文件夹下。

这时侯,你的 QT Designer 中就会出现一个 From1 来. 更改右下角那个窗口里的name 改为MainFrom.把caption的值改为signal".

然后我们从左面的Toolbox拖拽一个PushButton.并把name改为ExitButton,把text改为Exit.

下面是效果图:

到这里我们已经把页面设置完了,下面我们为ExitButton设置信号函数.

    我们按一下 F3(或者有菜单栏选择 Edit->Connections ),然後在那个 “Exit” 按钮上点击一下。

这时侯我们就看到了View and Edit Connection 页面了在Signal中选择clicked,在slot中,先选择close()就好了,在 Reciever中选择MainFrom.这时侯选择OK.

 

我们就算是基本完成了。保存下。 如果想看看这个小程序长什麽样子.可以用 CTRL+T来看 PreView. 

我们现在还不能编译这个程序,为什么呢?对了因为我们还缺少一个main.cpp。想一想上一章怎样创建的了。从菜单栏的File->New打开新建对话框,选择最后一个:C++ Main—File(main.cpp).

好了,现在来编译我们的程序。

先打开一个终端,然后切换到我们建立工程的目录。然后利用Qt的工具生成Makefile文件。# qmake

编译:# make

运行:# ./signal

点击Exit按扭,程序退出。

三、槽应用实例

下面我们要做一个加法器。打开Qt,新建名为slot的工程文件,然后再新建如下图所示的界面:

修改要显示结果的label的name为textLableresult.并把其text清空.把确定按扭的name改为AddButton.

好了,我们已经把页面设置好了.我们现在要做的就只有使用户按AddButton按扭时textLableresult能够显示lineEdit1和lineEdit2的和.所以我们必须对AddButton的clock信号设置一个槽.

首先按一下 F3(或者有菜单栏选择 Edit->Connections ),然后在AddButton按钮上点击一下这时侯我们就看到了"View and Edit Connection"的页面了。在Signal中选择clicked, 在Receiver中选择MainForm.在Slot中,都是QT为我们准备好的槽,我们需要建立自己的槽.

点击右边的“Edit Slots...”按钮,然后就可以看见" Edit Functions "窗口,该窗口也可以通过“主菜单 Edit->Slots” 打开。点击 "New Function" 按钮,将"newSlot()"改为 "add()" ,然后选择 OK。

这时我们已经建立了一个槽,我们再回到 "View and Edit Connection"对话框中,在 Slot 中我们现在看到了刚刚自己创建的槽"add()",我们选择它.这样就可以使AddButton的信号与add()槽关联起来了。

我们还需要向add()槽里写一些代码,使它能够完成加法功能.在主窗体"form_main"的空白处双击鼠标左键,弹出对话框"Creating ui.h file",我们选择"Yes",然后可以看到一个编辑窗口。如下图所示:

我们需要在 void MainForm::add()中添加如下的代码:

void MainForm::add()

{

    QString str1,str2,strResult;

    double add1=0.0,add2=0.0,result0.0;

    str1=lineEdit1->text();

    str2=lineEdit2->text();

    Bool ok1=FALSE,ok=FALSE;

    add1=str1.toDouble(&ok1);

    add2=str2.toDouble(&ok2);

    if(ok1&&ok2)

    {

        result=add1+add2;

        strResult.sprintf("%f",result);

        textLabelResult->setText(strResult);

    }

}

到这里我们编辑的工作就都结束了,我们先保存。然后打开一个终端,改变当前目录为我们保存项目的目录,然后

生成Makefile文件:#qmake

编译:# make

运行:# ./ slot

下面是我运行的界面:

Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·在Linux下用Qt开发新一代DTS图形数据系统的分析  (2007-09-27 11:45:10)
 ·Linux系统上把PHP编译进Apache静态内核  (2007-09-27 11:40:57)
 ·Linux下系统时间快8小时问题综述  (2007-09-27 11:36:13)
 ·linux下的BT软件  (2007-09-27 11:33:52)
 ·Linux Shell脚本Ldd命令原理及使用方法  (2007-09-27 10:55:40)
 ·Linux操作系统上安装MYSQL数据库的方法  (2007-09-27 10:54:34)
 ·Ubuntu Linux系统下的Sudo命令配置实例  (2007-09-27 10:51:30)
 ·Debian Linux 操作系统下JDK的配置方法  (2007-09-27 10:50:50)