for(i=0;i<100;i++) number[i]='\\0'; }
void on_eq_clicked(GtkButton *button,gpointer data) {
double numb; gchar *result; gchar num[100]; switch(s) {
case 1:
numb=nn+mm; break; case 2:
numb=nn-mm; break; case 3:
numb=nn*mm; break; case 4:
if(mm==0) {
gtk_entry_set_text(GTK_ENTRY(entry),\ break; }
numb=nn/mm; break; }
result=g_ascii_dtostr(num,100,numb); gtk_entry_set_text(GTK_ENTRY(entry),result); have_result=TRUE; }
int main(int argc,char* argv[]) {
GtkWidget *window; GtkWidget *vbox;
GtkWidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4; GtkWidget *button; GtkWidget *label; GtkWidget *label1;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window),500,300); gtk_container_set_border_width(GTK_CONTAINER(window),10); gtk_window_set_title(GTK_WINDOW(window),\计算器\
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(window),\
vbox=gtk_vbox_new(TRUE,0);
gtk_container_add(GTK_CONTAINER(window),vbox); hbox=gtk_hbox_new(TRUE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox,TRUE,TRUE,5); label=gtk_label_new(\
gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5); label1=gtk_label_new(\
gtk_box_pack_start(GTK_BOX(hbox),label1,TRUE,TRUE,5);
time_t now;
struct tm *l_time; gchar buf[100];
now=time((time_t *)NULL); l_time=localtime(&now);
sprintf(buf,\ gtk_label_set_text(GTK_LABEL(label1),buf);
button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\
entry=gtk_entry_new();
gtk_editable_set_editable(GTK_EDITABLE(entry),FALSE); gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL); gtk_box_pack_start(GTK_BOX(vbox),entry,TRUE,TRUE,5);
hbox1=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox1,TRUE,TRUE,5); button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\
hbox2=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox2,TRUE,TRUE,5); button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\
hbox3=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox3,TRUE,TRUE,5); button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\
hbox4=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox4,TRUE,TRUE,5); button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\ button=gtk_button_new_with_label(\
gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);
g_signal_connect(G_OBJECT(button),\
gtk_widget_show_all(window); gtk_main(); return FALSE; }
运行结果图:
第9章 习题答案
1. Qt自带图形开发工具由哪些工具组成?
答:Qt Designer可视化地设计视窗,Qmake由简单的宇平台无关的项目文件生成Makefile,Qt助手快速地发现你所需要的帮助,qembed转换数据,比如把图片转还为C++代码,qvfb在桌面上运行和测试嵌入式应用程序,makeqpf为嵌入式设备提供预先做好的字体,moc元对象编译器,uic用户界面编译器,qtconfig一个基于Unix的Qt配置工具,这里是在线帮助。
2. 在无第三方开发工具的情况下,如何编译QT程序?
答:先用vi编辑源代码保存,在编译程序之前,要首先生成它的Makefile文件。打开一个终端,然后切换至
保存有项目的位置,使用以下命令来生成Makefile文件:
[root@localhost~]#qmake -o Makefile hellopro
现在,就可以运行make来编译程序了,根据系统的性能,这个步骤需要花费一点时间。当编译工作完成后,[root@localhost~]#qmake -o Makefile hellopro [root@localhost~]#make [root@localhost~]#.hello
3. Qt编程的核心机制是什么?与Windows编程有什么异同点?
答:信号(signals)和槽(slots)机制是Qt的核心机制,信号和槽是一种高级接口,应用于对象之间的通信,它是Qt的核心特性,也是Qt区别于其它工具包的重要地方。信号和槽是Qt自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的Qt工具,该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。它与Windows事件驱动机制相类似又不完全相同。
4. Eclipse+Qt开发环境的配置过程是什么?试搭建起Eclipse+Qt开发平台。
答:先安装Eclips,然后到这个网站http://qt.nokia.com/developer/eclipse-integration上去下载Qt plugin压缩包,解压得到两个子文件夹分别为plugins和features,将这两个文件夹覆盖/usr/lib/eclipse/文件夹下的同名文件夹,打开Eclipse , 在\窗口->首选项->qt\里配置如下信息:
Name : Qt
Bin Path : /usr/lib/qt4/bin Include Path : /usr/include/ 5. 标准输入框能为哪些数据类型的提供输入?
答:标准输入框能提供多种数据类型的输入,比如字符串,Int类型,Double类型或是下拉列表框的条目。 6. 基于QT编写一个计算器程序。 答:源代码仅供参考: main.cpp: #include \#include
int result = 0;
QApplication app(argc, argv); CWidget *main = new CWidget(); main->setCaption(\
app.connect(&app,SIGNAL(lastWindowClosed()),SLOT(quit())); main->show(); result = app.exec(); return result; }
cwidget.h:
#ifndef CWIDGET_H #define CWIDGET_H #include
输入./hello来运行程序。以上整个的编译运行命令行过程总结如下: