免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1461 | 回复: 0
打印 上一主题 下一主题

Linux下QT图形界面开发(二)——信号和槽(1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-14 11:30 |只看该作者 |倒序浏览

一、信号和槽
Qt的一项重要的机制就是它的信号和槽,在图形用户界面编程中,经常需要将一个窗口部件的变化通知给另一个窗口部件,或者说系统对象进行通信.一般的图形用户编程中采用回调函数进行对象间通信(如:gtk+),这样回调函数和处理函数捆绑在一起,但这样做没有信号和槽机制简便和灵活.
如Qt的窗口部件有多个预定义的信号,槽是一个可以被调用处理特定信号的函数.Qt的窗口部件有多个预定义的槽,当一个特定的时候发生的时候,一个信号被发射,对信号感兴趣的槽就会调用对应响应函数.
信号/槽机制在QObject类中实现,从QObject类或其一个子类继承的所有类可以包含信号和槽.当对象改变其状态的时候,信号被发送,对象不关心有没有其他对象接收到这信号.槽是类的正常成员函数,可以将信号和槽通过connect函数任意相连.当一个信号被发射,它所连接的槽会被立即执行,如同一个普通函数调用一样.
槽是普通成员函数,它和普通成员函数一样分为public、protected和private共3类。Public slots表示声明是任何信号都可以相连的槽;protected slots表示这个类的槽及其子类的信号才能连接;private slots表示这个类本声的信号可以连接这个类的槽。
二、 在Qt Designer中信号应用实例
下面我们用一个实例来了解信号的用法.
首先我们新建一个文件夹:
#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 Designer中槽应用实例
下面我们要做一个加法器。打开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
下面是我运行的界面:



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22935/showart_381663.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP