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); //创建窗口
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),\Gtk!\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 *
********************/ #include
#include
//三个按钮一个布局 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( \this, \);
connect( btnOne, SIGNAL(clicked()), SLOT(onBtnOne()) ); btnTwo=new QPushButton( \this, \);
connect( btnTwo, SIGNAL(clicked()), SLOT(onBtnTwo()) ); btnThree=new QPushButton( \this, \); connect( btnThree, SIGNAL(clicked()), SLOT(onBtnThree()) ); //创建表格布局,并放置按钮
grid = new QGridLayout( this, 3, 3, 10 ); 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,\from btnOne!\}
void MyWidget::onBtnTwo(){
QMessageBox::information(this,\from btnTwo!\}
void MyWidget::onBtnThree(){
QMessageBox::information(this,\from btnThree!\}
/******************** * *main.cpp *主程序 *
********************/ #include \#include
a.setMainWidget( &w ); w.show(); return a.exec(); }
############################## #qmake生成的的工程文件