initialize() qwsserver::startup(flags)——init_display()
1.1 1.2
1.1 startup
new qwsserver(flags)
new qwsserverdata
opendisplay————qt_init_display
new qwsclient init_display
openmouse 1.2
openkeyboard
screenregion
1.2 init_display
qt_fbdpy=new qwsdisplay()——d=new data
qcolor::initialize init()
qfont::initialize qt_get_screen()
qpainter::initialize
2.1 鍵盤
2.2 滑鼠
2.3 lcd (framebuffer)
2.4 時鐘
2.5 qthread(使用linux執行緒庫)
2.6 qsocketdevice
2.7 qfile,使用檔案操作 ::open
::close :: read ::write 定義於qplatformdefs.h
2.8 記憶體分配 malloc
2.9 管道 pipe
2.10 mmap
2.11 訊號量
kbdfd = ::open(device.isempty()?"/dev/tty0":device.latin1(), o_rdwr|o_ndelay, 0);
if ( kbdfd >= 0 )
qsocketnotifier *notifier;
notifier = newqsocketnotifier( kbdfd, qsocketnotifier::read, this );
connect( notifier,signal(activated(int)), this, slot(readkeyboarddata()) );
qsocketnotifier::qsocketnotifier( int socket, type type, qobject *parent,
const char *name )
: qobject( parent, name )
#if defined(qt_check_range)
if ( socket < 0 )
qwarning( "qsocketnotifier: invalid socket specified" );
# if defined(q_os_unix)
if ( socket >= fd_setsize )
qwarning( "qsocketnotifier: socket descriptor too large for select()" );
# endif
#endif
sockfd = socket;
sntype = type;
snenabled = true;
// 主迴圈中第二個是檢測哪個裝置描述符出現了錯誤
nsel = select( highest + 1,
&d->sn_vec[0].select_fds,
&d->sn_vec[1].select_fds,
&d->sn_vec[2].select_fds,
tm );
activatesocketnotifiers();
——default:
res = internalnotify( receiver, e ); //一路沒處理,跑到最後
break;
——consumed = receiver->event( e ); //一路沒處理,跑到最後
——qsocketnotifier::event(qevent::sockact)
——emit activated(sockfd) // 激發訊號
注:在activatesocketnotifiers();中指定了receiver和event,具體詳看**如下:
int qeventloop::activatesocketnotifiers()
if ( d->sn_pending_list.isempty() )
return 0;
// activate entries
int n_act = 0;
qevent event( qevent::sockact );
qptrlistiteratorit( d->sn_pending_list );
qsocknot *sn;
while ( (sn=it.current()) ) {
++it;
d->sn_pending_list.removeref( sn );
if ( fd_isset(sn->fd, sn->queue) ) {
fd_clr( sn->fd, sn->queue );
n_act++;
return n_act;
Qt E中的鍵盤裝置管理
font face p.msonormal,li.msonormal,div.msonormal p.msocaption,li.msocaption,div.msocaption p.a,li.a,div.a page page section1 div.section1 鍵盤裝置在 qt中表現為...
基於Linux和QT E的軟鍵盤設計
隨著對嵌入式系統體積小型化和操作人性化的要求,以及大尺寸觸控式顯示屏的廣泛應用,在嵌入式系統中採用軟鍵盤實現字元的輸入,已經成為目前的發展主流。qt是乙個跨平台的c 圖形介面庫,是由挪威trolltech公司推出的產品。它採用的是物件導向的程式設計思想,因此,具有良好的可擴充套件性和可移植性,同時支...
鍵盤的彈出和隱藏
第一種 彈出時判斷是哪個控制項下,收起時判斷焦點 protected void hidesoftkeyboard protected void showsoftkeyboard view v 第二種 和第一種相反 protected void hidesoftkeyboard view v prot...