¡¡¡¡GTK£¬×÷ΪÓë QT ²¢´æµÄÁíÍâÒ»Ì×ͼÐο⣬ÉîÊÜC³ÌÐòÔ±µÄϲ°®¡£ÔÚͬһ³ÌÐòÖÐʹÓà QT ºÍ GTK£¬ÉõÖÁÊÇÆäËüͼÐο⣬¶ÔÓÚ±àдǶÈëʽ(Embeded)³ÌÐòÊÇÊ®·ÖÓÐÒâÒåµÄ¡£ÕâÒ²Õýʽ±¾ÎÄÕÂËù²ûÊöµÄÖ÷Ìâ¡£
¡¡¡¡
¡¡¡¡1. ǶÈëʽ³ÌÐòµÄ¸ÅÄî
¡¡¡¡Ç¶Èëʽ³ÌÐòÒ»°ãûÓÐ×Ô¼ºµÄÖ÷Ñ»·Ì壬ËüÖ±½ÓʹÓô°¿ÚµÄIDÀ´Ç¶Èëµ½ÆäËü´°¿ÚÖС£ÔÚ Xlib ²ã´ÎÉÏ£¬Ê¹Óú¯Êý XReparentWindow ÖØÐÂÉèÖÃÒ»¸ö´°¿ÚµÄ¸¸´°¿Ú:
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡XReparentWindow(Display *display, Window w,
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Window parent, int x, int y)
¡¡¡¡
¡¡¡¡¼´¿ÉÒÔ°Ñ´°¿Ú w ǶÈëµ½´°¿Ú parent ÖС£
¡¡¡¡
¡¡¡¡Ç¶Èëʽ³ÌÐòÒ»°ãʹÓö¯Ì¬¿âÔØÈëµÄ·½·¨£¬ÕâÑùʹÓÃÈκÎX´°¿ÚϵͳϵÄͼÐο⣬¶¼¿ÉÒÔͨ¹ýÊä³ö(Export)Æä´°¿ÚIDµÄ·½·¨ºÍÆäËü³ÌÐò¿âÐͬ¹¤×÷¡£Ç¶Èë³ÌÐòÐèÒª¸¸´°¿ÚÀ´¹ÜÀí´°¿ÚµÄһЩ²Ù×÷£¬Èç´°¿ÚµÄ³ß´ç¹ÜÀí£¬¼üÅ̾۽¹µÈµÈ¡£Ò»¸öÍêÕûµÄÓ¦ÓóÌÐòÒ²¿ÉÒÔǶÈëµ½ÆäËü´°¿ÚÖУ¬Ò»°ãµØ£¬½¨Á¢Ö÷´°¿Úʱʹ´°¿Ú²»ÊܹÜÀí£¬È»ºóʹÓÃXReparentWindow()ÉèÖø¸´°¿Ú¡£
¡¡¡¡
¡¡¡¡2. ÔÚ QT ÖÐʹÓà Motif
¡¡¡¡ÔÚ QT 2.x °æ±¾ÖÐÓÐÒ»¸ö QT µÄ Xt/Motif µÄÀ©Õ¹£¬Ëü¿ÉÒÔʹÓû§±àдͬʱ֧³Ö Xt/Motif ºÍ Qt µÄ³ÌÐò¡£QT ¶ÔÓÚXt/Motif µÄÀ©Õ¹Êǽ¨Á¢ÁËÀà QXtWidget ºÍÀà QXtApplication£¬ËüÖ÷Òª´¦ÀíÁËǶÈë´°¿ÚµÄµ×²ãʼþ¡£
¡¡¡¡
¡¡¡¡½¨Á¢Ò»¸öÒÔ QT ΪÖ÷µÄ°üº¬Motif×é¼þ(Widget)µÄ³ÌÐò£¬Ö»ÒªÊ¹ÓÃQXtApplication ½¨Á¢Ö÷³ÌÐò£¬ÉèÖÃÒ»¸ö¿ÉÒÔ°üº¬QTºÍMotif´°¿ÚµÄÖ÷´°¿Ú¼´¿É£¬ÀýÈç:
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡QXtApplication app(argc, argv, "TwoEditors");
¡¡¡¡¡¡¡¡¡¡¡¡TwoEditors m;
¡¡¡¡¡¡¡¡¡¡¡¡app.setMainWidget(&m);
¡¡¡¡¡¡¡¡¡¡¡¡m.show();
¡¡¡¡¡¡¡¡¡¡¡¡return app.exec();
¡¡¡¡
¡¡¡¡ÔÚ m ÖÐÉèÖÃÁ½¸ö´°¿Ú£¬Ò»¸öÊÇQTÀཨÁ¢µÄ£¬Ò»¸öÊÇQXtWidgetÀཨÁ¢µÄ£¬
¡¡¡¡¡¡¡¡class TwoEditors : public QMainWindow {
¡¡¡¡¡¡¡¡¡¡¡¡QMultiLineEdit* qtchild;
¡¡¡¡¡¡¡¡¡¡¡¡EncapsulatedXtWidget* xtchild;
¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡public:
¡¡¡¡¡¡¡¡¡¡¡¡TwoEditors() : QMainWindow( 0, "mainWindow") {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡QPopupMenu* file = new QPopupMenu( this );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡file->insertItem("E&xit", qApp, SLOT( quit() ) );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡menuBar()->insertItem( "&File", file );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡statusBar();
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡QSplitter* splitter = new QSplitter( this );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡splitter->setOpaqueResize( TRUE );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡setCentralWidget( splitter );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡xtchild = new EncapsulatedXtWidget( splitter );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡qtchild = new QMultiLineEdit( splitter );
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡qtchild->setText(QTEDMSG);
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡};
¡¡¡¡
¡¡¡¡3. ÔÚ QT ÖÐʹÓà GTK
¡¡¡¡ÔÚ QT ÖÐʹÓà GTK ÉÔ¸´ÔÓһЩ£¬Ö÷ÒªÊÇÒòΪ±ØÐë°Ñ QT µÄÖ÷Ñ»·ºÍ GTK µÄÖ÷Ñ»·Èںϵ½Ò»Æð±È½Ï¸´ÔÓ¡£ÔÚÈí¼þ°ü QGtkWidget ÖУ¬×÷ÕßʹÓÃÁË GTK µÄÒ»²¿·Ö´úÂ룬QTµÄÒ»²¿·Ö´úÂëºÍKDEµÄÒ»²¿·Ö´úÂ룬¹¹ÔìÁË QGtkWidget ÀàºÍ QGtkApplicationÀà¡£
¡¡¡¡
¡¡¡¡±àд³ÌÐòµÄ½á¹¹ºÍÉÏÃæµÄÀý×ÓÀàËÆ£¬
¡¡¡¡
¡¡¡¡¡¡¡¡QGtkApplication a( argc, argv );
¡¡¡¡¡¡¡¡QMainWindow *wnd=new MainWnd();
¡¡¡¡¡¡¡¡QPushButton *Qt=new QPushButton("This is Qt!", wnd);
¡¡¡¡¡¡¡¡QGtkWidget *Gtk=new QGtkWidget(wnd);
¡¡¡¡¡¡¡¡wnd->resize(200,100);
¡¡¡¡¡¡¡¡Qt->setGeometry(0,0,100,50);
¡¡¡¡¡¡¡¡Gtk->setGeometry(100,0,100,100);
¡¡¡¡¡¡¡¡GtkWidget *box=gtk_vbox_new(FALSE, 0);
¡¡¡¡¡¡¡¡gtk_container_add(GTK_CONTAINER(Gtk->getGtkWidget()), box);
¡¡¡¡¡¡¡¡GtkWidget *b=gtk_button_new_with_label("This is GTK!");
¡¡¡¡¡¡¡¡gtk_box_pack_start(GTK_BOX(box), b, TRUE, TRUE, 0);
¡¡¡¡¡¡¡¡gtk_widget_show(b);
¡¡¡¡¡¡¡¡gtk_widget_show(box);
¡¡¡¡
¡¡¡¡¡¡¡¡wnd->show();
¡¡¡¡¡¡¡¡a.setMainWidget( wnd );
¡¡¡¡¡¡¡¡gtk_widget_show(b);
¡¡¡¡¡¡¡¡gtk_widget_show(box);
¡¡¡¡
¡¡¡¡¡¡¡¡return a.exec();