Linux下QT图形界面开发(二)——信号和槽(1)

 

一、信号和槽

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.

下面是效果图:

Linux下QT图形界面开发(二)——信号和槽(1)_第1张图片

 

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

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

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

Linux下QT图形界面开发(二)——信号和槽(1)_第2张图片

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

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

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

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

编译:# make

运行:# ./signal

点击Exit按扭,程序退出。

 

三、在Qt Designer中槽应用实例

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

Linux下QT图形界面开发(二)——信号和槽(1)_第3张图片

修改要显示结果的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()槽关联起来了。

Linux下QT图形界面开发(二)——信号和槽(1)_第4张图片

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

Linux下QT图形界面开发(二)——信号和槽(1)_第5张图片

我们需要在 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下QT图形界面开发(二)——信号和槽(1)_第6张图片

 

四、在终端窗口中Qt编程信号的应用实例
打开一个终端,用vi建立一个文件t2.c,键入如下程序:
#include <qapplication.h>
#include <qpushbutton.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv ); //创建QApplication对象


QPushButton quit( "Quit", 0 ); //添加一个按扭,因为这个按钮是一个顶层窗口,我们把0作为它的父对象
quit.resize( 75, 30 ); //设置按扭尺寸
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );// quit按扭的clicked信号与QApplication对象的quit()槽连接
a.setMainWidget( &quit ); //设置a为这个应用程序的主窗口部件
quit.show(); //显示quti按扭
return a.exec();
}

 

生成工程文件:

qmake -project
生成makefile
qmake

编译mnake


下面是界面截图:


用户点击按扭,程序退出.

 

你可能感兴趣的:(linux,qt,makefile,图形,终端,Signal)