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来运行程序。以上整个的编译运行命令行过程总结如下:
#include
Q_OBJECT public:
CWidget(QWidget *parent=0, char *name=0); ~CWidget(); private:
QLineEdit *edit; QPushButton *button[16]; QVBoxLayout *mainLayout; QHBoxLayout *topLayout; QGridLayout *bottomLayout; int firstNum; int secondNum; int oper; protected slots: void setValue(); void setOper(); void calculate(); void clear(); protected:
virtual bool event(QEvent *e); private: void initialize(); void createForm(); void onClicked(int key); }; #endif
cwidget.cpp: #include \#define KEY_CLR \#define KEY_ADD \#define KEY_SUB \#define KEY_MUL \#define KEY_DIV \
#define KEY_EQ \#define KEY_0 \#define KEY_1 \#define KEY_2 \#define KEY_3 \#define KEY_4 \#define KEY_5 \#define KEY_6 \#define KEY_7 \#define KEY_8 \#define KEY_9 \#define BUTTONWIDTH 30 #define BUTTONHEIGHT 30 static char *buttontext[] = {
KEY_1,KEY_2,KEY_3,KEY_4, KEY_5,KEY_6,KEY_7,KEY_8,
KEY_9,KEY_ADD,KEY_SUB,KEY_MUL, KEY_DIV,KEY_EQ,KEY_CLR,KEY_0 };
CWidget::CWidget(QWidget *parent, char *name) {
initialize(); createForm(); }
CWidget::~CWidget() {
delete edit; delete *button; delete mainLayout; delete topLayout; delete bottomLayout; }
void CWidget::calculate() {
switch(oper) {
case Qt::Key_Plus:
firstNum += secondNum;break; case Qt::Key_Minus: