Linux下應用程式開發:QT中使用圖形庫(轉)
Linux下應用程式開發:QT中使用圖形庫(轉)[@more@] 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();
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();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-949517/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下應用程式開發:使用QT製作Skin(轉)LinuxQT
- Linux下應用程式開發:QT開發簡介(轉)LinuxQT
- Linux下應用程式開發:QT中的多執行緒程式設計(轉)LinuxQT執行緒程式設計
- Linux下應用程式開發:QT的內部程式通訊(轉)LinuxQT
- Linux下應用程式開發:QT的訊號與槽機制(轉)LinuxQT
- 【Qt開發】更改應用程式圖示和工作列圖示QT
- 【轉】設定Qt應用程式圖示及應用程式名QT
- Qt 嵌入式圖形開發大全和QT開發手冊QT
- 如何在windows下發布QT應用程式(qt專案打包)WindowsQT
- 開發Web應用程式中Cookie使用的問題 (轉)WebCookie
- Qt-跨平臺的C++圖形使用者介面應用程式框架(一)QTC++框架
- Linux下的GTK圖形介面程式設計(轉)Linux程式設計
- Android應用初級開發——Canavas元件圖形應用Android元件
- 用xwin32顯示遠端Linux主機圖形應用程式(轉)Win32Linux
- web開發中圖形Web
- 開發Qt應用程式的基本方法總結QT
- Rational的Linux應用程式開發解決方案(轉)Linux
- 用Nim語言開發windows GUI圖形介面程式WindowsGUI
- 怎樣使用AJAX進行應用程式開發(轉)
- Oracle應用Linux開發C(轉)OracleLinux
- VC開發應用程式答疑 (轉)
- 使用JAVA開發CORBA應用 (轉)JavaORB
- 開始使用SmartDraw繪製開發中的各種圖形
- 使用 MPAndroidChat 開發圖表應用Android
- Qt開發技術:圖形檢視框架(一)基本介紹QT框架
- Qt場景中圖形項的刪除QT
- 基於SkyEye執行Qt:著名應用程式開發框架QT框架
- 使用MyEclipse開發Java EE應用:企業級應用程式專案(下)EclipseJava
- Linux程式應用開發環境和工具經驗談(轉)Linux開發環境
- 提取應用程式中的圖示資源 (轉)
- Qt——應用程式打包(一)QT
- linux下的圖形工具Linux
- 小程式開發-mpvue中使用圖表庫Vue
- 6 款面向 Linux 使用者的開源繪圖應用程式Linux繪圖
- 開發 Linux 命令列實用程式(轉)Linux命令列
- 在Delphi中開發使用多顯示器的應用程式
- Linux下mSQL資料庫開發技術(轉)LinuxSQL資料庫
- 開發具有Windows工作列佈告區圖示的應用程式 (轉)Windows