fi echo \}
#重新启动可执行文件 function restart_svc() { stop_svc start_svc echo \}
#输出程序使用方法及简单实例 function USAGE() { echo \ echo \ echo ${COMMAND_PATH} echo \}
#程序主要路径 if [ $# -lt 1 ] ; then USAGE else
#根据传入参数完成启动、重启、终止程序的功能 case $1 in start) start_svc ;; restart) restart_svc ;; stop) stop_svc ;; *) USAGE ;; esac fi
第12章 gcc的使用与开发
1.一个C/C++程序从开始编码到生成可执行的二进制文件至少要经过4个步骤:(1)预处理(Preprocessing);(2)编译(Compilation);(3)汇编(Assembly);(4)链接(Linking) 2.略。
3.略,可参见正文表12-1。
4.默认路径放在/usr目录下,其中库文件在/usr/lib下,头文件在/usr/include目录下。 5.为了简化生成代码的步骤,GNU提供了make工具。
make工具读入一个文本文件,文本文件中主要记录了一些规则。规则说明了生成最终的二进制代码依赖哪些模块以及这些模块如何生成的信息。为了简化,这个文件通常命名为makefile。
makefile文件的一般格式是: 目标:依赖项列表 (Tab缩进)命令... 其中,“依赖项”一般为生成目标所需的其他目标或者文件名。
26
6.略,可参见正文表12-3。 第13章 gtk+图形界面程序设计
1.在Xlib之上出现了很多更高层的开发工具包。它们将底层的Xlib的API进行封装,提供更高级的接口,达到降低开发难度,提高开发效率的目标。此外,这些工具包大多并非完全专注于界面的开发,在常用数据结构(树、链表等)甚至数据库操作等方面都提供了接口。下面将介绍的GTK+就是这样一个开发工具包。 2.GTK+由3个库组成:(1)GLib:是GTK+和Gnome的底层核心库,提供了可以供C语言处理的数据结构、可移植的封装接口和用来处理事件循环、线程、动态加载的接口,构成了一个类似对象的体系结构。(2)Pango:是处理界面布局和国际化的库,构成了GTK+2.0处理字符和字体的核心。(3)Atk:提供了一些其他功能的接口。一个实现对Atk接口支持的应用软件,可以实现屏幕阅读、放大、使用其他输入设备等功能。
3.除了GIMP外,大量使用GTK+的著名软件还有图形桌面系统GNOME、字处理软件Abiword、图表软件Dia以及辅助开发GTK+程序的Glade等。 4.
(1)头文件源代码: #include
//btnOne的点击事件处理函数
void on_btn_One_clicked(GtkWidget *widget,gpointer data){ g_print(\}
//btnTwo的点击事件处理函数
void on_btn_Two_clicked(GtkWidget *widget,gpointer data){ g_print(\}
//btnThree的点击事件处理函数
void on_btn_Three_clicked(GtkWidget *widget,gpointer data){ g_print(\}
//窗口关闭事件处理函数
void on_delete(GtkWidget *widget, GdkEvent *event,gpointer data){ g_print(\ gtk_main_quit(); }
(2)主程序源代码:
int main(int argc,char * argv[]){ GtkWidget *window;//窗口 GtkWidget *btnOne;//按钮1 GtkWidget *btnTwo;//按钮2 GtkWidget *btnThree;//按钮3 GtkWidget *table;//table布局
gtk_set_locale();
gtk_init(&argc,&argv); //创建窗口
27
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),\ gtk_container_set_border_width (GTK_CONTAINER (window), 10); //创建3*3的表格布局并和窗口关联 table = gtk_table_new(3,3,TRUE);
gtk_container_add(GTK_CONTAINER(window),table); //关联窗口关闭事件
g_signal_connect (G_OBJECT (window), \ G_CALLBACK (on_delete), NULL); //创建按钮并关联相对应的事件处理程序
btnOne = gtk_button_new_with_label (\ g_signal_connect (G_OBJECT (btnOne), \ G_CALLBACK (on_btn_One_clicked), NULL); btnTwo = gtk_button_new_with_label (\ g_signal_connect (G_OBJECT (btnTwo), \ G_CALLBACK (on_btn_Two_clicked), NULL); btnThree = gtk_button_new_with_label (\ g_signal_connect (G_OBJECT (btnThree), \ G_CALLBACK (on_btn_Three_clicked), NULL); //在窗口布局上放置三个按钮
gtk_table_attach(GTK_TABLE(table),btnOne,0,2,0,1,GTK_FILL,GTK_FILL,0,0); gtk_table_attach_defaults(GTK_TABLE(table),btnTwo,0,2,1,3); gtk_table_attach_defaults(GTK_TABLE(table),btnThree,2,3,0,3); //显示窗口
gtk_widget_show_all(window); gtk_main(); return 0; }
第14章 Qt图形界面程序设计
1.Qt是和GTK+一样,是在XLib之上的开发包。
2.Qt是采用信号/槽的方式实现消息管理,而GTK+是采用类似回调函数的方式实现的。 3.著名项目有:KDE、Nokia相关软件、FEKO等。
4.Qt软件虽然由商业化公司维护,但是Qt也为软件的开发提供了多种选择方式。Qt的版本总的可以分为自由软件和商业两类版本,无论那种版本都可以获得软件的源代码。自由版本可以免费使用,可以采用GPL或LGPL软件许可证的方式。商业版的版本是需要付费的,使用商业版的版本开发出的软件受到更少的限制,还可以提供及时的客户支持服务。在自由软件版本中如果想获得质量高的客户支持服务可以通过付费的方式按需要购买特定的支持服务项目。 5、
/******************** *
*myWidget.h *
********************/
28
#include
class MyWidget: public QWidget{ Q_OBJECT private:
//三个按钮一个布局 QPushButton *btnOne; QPushButton *btnTwo; QPushButton *btnThree; QGridLayout *grid; public: MyWidget( QWidget* parent = 0, const char* name = 0); ~MyWidget(); protected:
//关闭事件处理程序 void closeEvent(QCloseEvent *); signals: //关闭事件 void closeSignal(QCloseEvent *); public slots:
//按钮点击处理程序 void onBtnOne(); void onBtnTwo(); void onBtnThree(); };
/******************** *
*myWidget.cpp *
********************/ #include \#include
MyWidget::MyWidget( QWidget* parent, const char* name): QWidget( parent, name){
//创建按钮并关联事件处理函数
btnOne=new QPushButton( \
connect( btnOne, SIGNAL(clicked()), SLOT(onBtnOne()) ); btnTwo=new QPushButton( \
connect( btnTwo, SIGNAL(clicked()), SLOT(onBtnTwo()) ); btnThree=new QPushButton( \
connect( btnThree, SIGNAL(clicked()), SLOT(onBtnThree()) ); //创建表格布局,并放置按钮
grid = new QGridLayout( this, 3, 3, 10 );
29
grid->addMultiCellWidget(btnOne,0,2,0,0); grid->addMultiCellWidget(btnTwo,0,0,1,2); grid->addMultiCellWidget(btnThree,1,2,1,2); //关联推出事件处理程序
connect( this, SIGNAL(closeSignal(QCloseEvent *)), qApp,SLOT(quit()) ); }
//析构函数
MyWidget::~MyWidget() {}
//关闭窗口时发出关闭信号
void MyWidget::closeEvent(QCloseEvent *ce){ emit closeSignal(ce); }
//按钮事件处理函数
void MyWidget::onBtnOne(){
QMessageBox::information(this,\}
void MyWidget::onBtnTwo(){
QMessageBox::information(this,\}
void MyWidget::onBtnThree(){
QMessageBox::information(this,\}
/******************** *
*main.cpp *主程序 *
********************/ #include \#include
int main( int argc, char **argv ){
QApplication a( argc, argv ); MyWidget w;
a.setMainWidget( &w ); w.show();
return a.exec(); }
############################## #qmake生成的的工程文件
############################## TEMPLATE = app INCLUDEPATH += .
30
# Input
HEADERS += myWidget.h
SOURCES += main.cpp myWidget.cpp
第15章 集成开发环境KDevelop的使用
1.KDevelop为用户在Linux下进行开发提供了统一的视图,集成了软件开发中用到的大多数工具。软件从设计、开发到最后的编译、发行所有的工作都可以在KDevelop下完成。另外,KDevelop提供了动态加载插件的机制,可以通过编写插件来扩充KDevelop的功能,满足用户的特殊要求。 2.“类”、“文件树”、“文档”和“消息”视图是使用最频繁的视图。 3.“消息”视图显示系统的即时状态,主要是编译时产生的错误、警告等提示信息。 4.开发新程序从创建新的工程开始。KDevelop根据开发的软件类型,提供了多种工程模板,用户可以选用适合的工程模板,先建立一个框架,然后再对这个框架进行改进,完成自己特定的功能。要创建新工程,先选择菜单【工程/新建工程】,打开创建新工程向导。
31