程序員LSI-TEC的開放空缺

2008年2月25日, 唧唧歪歪 C / c + +Linux的 · 查看評論

LSI-TEC ,國際知名的公司實驗室的綜合sitemas美國藥典的一部分,正在對人才工作的有關數字電視的發展項目。

要求:

  • C語言,C + +或Java;
  • Linux的嵌入式sitemas;
  • 顛覆;
  • Autotools的;

地點:
聖保羅大學校園 - 大學城

利害關係人可以發送自己的簡歷:
希勒爾貝歇爾<hilel@lsi.usp.br>

實驗室綜合技術系統
集成系統實驗室

博客服務器遷移

2008年2月23日,在發布博客 MYSQL · 查看評論

享受博客已經通過了技術上的困難,我決定改變從服務器和更新破碎的WordPress版本。

的WordPress升級的細節可能會有所不同版本的升級,可以發現網站上。

我可以使用的選擇進口/出口的WordPress本身,而是與老供應商的問題之一,是我無法訪問博客的行政區域。 甚至沒有作出任何單一上傳我再也無法登錄到博客和我所得到的響應是供應商:

“......聯繫WordPress的開發......”

於是我決定到競爭對手的聯繫和遷移到指甲...

我用的passsos很簡單,如下:

僱用新的供應商

我做了一些互聯網搜索,諮詢的朋友,並在年底剛剛填寫付款確認的形式,信用卡號碼和等待。

備份

雖然我是等待新的供應商確認,我的博客備份。 正如我有大量的“垃圾”的安裝,我決定只備份與數據庫的職位,並使用一個版本的WordPress limpinha。

要備份的MySQL,我使用它的命令行工具mysqldump的。 最酷的功能之一,在我看來MySQL和它的工具是遠程使用它們的可能性。 這SYSADMIN倍幾次救了我的皮膚。

命令很簡單:

  =my.old.mysqlserver 用戶@主機:〜$ mysqldump的-主機= my.old.mysqlserver 
              -用戶= myuser這種-密碼 
              mybkp.sql - 數據庫myblogdatabase> mybkp.sql 

主辦= my.old.mysqlserver:連接到主機那裡是我的MySQL數據庫
用戶= myuser這種:使用該用戶的連接。
密碼:問一個密碼提示。 如果我想直接輸入密碼,也有可能做密碼= mypass。
myblogdatabase數據庫:在數據庫的“myblogdatabase”我的博客使用,所有的表轉儲。
> Mybkp.sql:輸出重定向到一個文件。

mysqldump的生成所有需要重新在相同的狀態,它是數據庫的SQL。

數據恢復

在轉儲文件開始被引用舊數據的基礎上。 如果新的數據庫有不同的名稱,你需要編輯轉儲文件。 這可以用sed:

  s /` olddatabase `/` newdatabase `/ mybkp.sql > mynewbkp.sql 用戶@主機:〜$ SED / olddatabase `` / `` newdatabase / mybkp.sql> mynewbkp.sql 

恢復很簡單,使用mysql的提示符:

  =my.new.mysqlserver --user =myuser --password 用戶@主機:〜$ mysql的-主機= my.new.mysqlserver -用戶= myuser這種-密碼
 MySQL的使用newdatabase;
 MySQL的>。  mynewbkp.sql 

這logamos我們進入新的基礎上,仍然是空的,的文件executaamos完整的SQL語句,重新從舊到新的表和數據轉儲。

升級WordPress的

升級WordPress的如下基本的安裝步驟:下載,解壓縮,內容移動到所需的位置和編輯的wp-config.php文件。

最後,瀏覽器,執行文件

http://my.blog.root.path/bla/bla/bla/wp-admin/upgrade.php

瞧! 您將收到一個管理員用戶登錄,公正的隨機密碼。

設置了WordPress的

當供應商提供的服務,它通常提供兩種方式供你訪問網站的功能。 一個是標準的方式來使用您的域名作為地址,因為其他提供相同的功能,作為一個陌生的網址。 今天,我發現這是為什麼:DNS提供商被任命前,我在陌生的新的供應商的URL訪問,而不會干擾(MAL)舊網站的運作。

Wordpres安裝後,任何試圖訪問的內容,重定向到老的博客。 然後我記得有兩個選項配置在博客的網址。 這已經足夠了,知道它在數據庫中。 邏輯表名,表wp_options抵達。

使用GUI工具MySQL查詢瀏覽器,我改變了字段的option_value的對應領域option_name的“選項”SITEURL'和'家'的,URL奇怪的,我有在遷移過程中utlizá它,而安裝的插件和主題。 全部完成後,我改變了DNS和選項終於恢復了原來的值。 此命令行看起來像這樣:

 ; MySQL的> SELECT * FROM wp_options限制1;  的wp_options其中option_value的='http://mydomain.com/etc';  where option_value = 'http://mydomain.com/etc' ; Query OK, 2 rows affected ( 0.02 sec ) Rows matched: 2 Changed: 2 Warnings: 0 mysql > 九月wp_options option_value的“http://url.estranha.com/etc其中option_value的='http://mydomain.com/etc';查詢確定,2行受影響(0.02秒)匹配的行:2更改:2警告 :0 MySQL的> 

第一條SQL語句是要知道哪些字段的表,第二個檢查什麼的選項有相同的URL和第三,最後更新。 之後,博客已經指向了正確的工作地址,可以通過該網站通常的回報。

結論

遷移指甲上的博客是不是最好的選擇,因為你可能會失去所有的數據。 我只能完成這一壯舉,因為我知道一點WordPress的操作和周圍的工具。 不過,我有我的懸念時刻。 在保持家庭單獨備份一個職位,我也救不了你的意見和選項一般。 在某些方面,這是很好的,我耍小聰明,做我的網站每週備份。

patxi!!!

2008年2月18日· 活動 · 查看評論

有多少博客報導,作為日常生活校園黨巴西將是多餘的,如果我做同樣的。 其實,我,因為我不能做,是我不能,我會告訴你在這裡的原因。

鑑於現在偉大的朋友古斯塔沃·岡薩雷斯,呼籲在COM-Linux的出版 ,我把什麼是“休假”,並決定申請志願者工作在校園的我們黨的一個空缺。 我已經自願參加,自由軟件項目,但身體出席將是第一次。

我取得了聯繫,發送簡歷(被志願者的技術水平),狂歡節(星期一),我收到一封電子郵件,要求出席週二下午在伊比拉布埃拉雙年展建設。

到達那裡時,我被介紹給Polkan(哥倫比亞)和巴勃羅和薩米拉(西班牙),這將是我們的工程師。 我們知道事件,並會安排在那裡的第二天。 他們等了大約30名志願者,並有許多2。 而我現在還偉大的朋友,Franci。

我們就回家,直到第二天找到更多的志願者使命。 儘管所有的情況下,指向相反,我支持我的好友杰拉德。 很快樂,我打電話給一個兒時的朋友,費爾南多,在里約熱內盧,並說服他來聖保羅是自願的。 他總是願意幫助支付prórpio口袋,剛好是自願的。 這dixou很高興,我叫我的女友盧西亞娜,聖靈,並勸他乘坐飛機來到這裡的。

聖灰星期三 - 06/02/2008

我尋求和杰拉爾多·阿隆索在早上路,讓你的包包,我們不得不在padoca這裡附近的咖啡,去伊比拉布埃拉。 一旦出現,隨著詹姆斯和帕特里夏(勇敢的)Franci和上班去了。 任務:desembolar表和持有超過50公里的網絡電纜(是的,網絡電纜50000米!)。 在entando,最大的挑戰是理解的工程師想什麼。 一個三次握手的通天之謎,解決了:他們在發言中慢慢西班牙,葡萄牙我們響應速度很慢,沒有帶鋼堅持英語。 這塊蛋糕!

在一天結束時,我們力求在機場盧西亞娜,我們都從睡眠逮捕電纜用盡。

(星期四) - 07/02/2008

Antes da Tempestade 似乎沒有更多的自願。 我們六至三十的工作。 我們做了一個無聲的協議,給他們最大的努力,以確保網絡基礎設施將是時間的準備。 我們使用的前一天學到了團隊的技巧和協調銀行的支持,以完成連接電纜。 我們測試超過5 000個RJ-45接口。 在這一天,我們開始失去了時間的軌道。 從這裡的任何報告可能已損壞的時間表。 在我們的處置三個動詞:吃飯,睡覺,工作。 值得注意的是一天的想法買的手套石匠。 他們救了我們手中的開發 :)

星期五 - 08/02/2008

從第一天開始,我們看到的語言將是一個困難的,但不是一個障礙。 我們了解到,更重要的不是給和/或收到的訂單,是了解和理解。

我們將繼續以測試連接器,遲到的日子裡,兩千多米的光纖應發起和精心呵護下重和發霉的木通道。 光纖的一半被釋放。 最後期限逼近。 在各方的電壓。 我們不能失敗。 我們承諾的。

經過反复勸說,費爾南多·巴勃羅·勸我們離開一個在potuñolish非正式交談,當然!

週六 - 09/02/2008

Ninho de Mafagafos 四個小時的睡眠時間,在上週五,我們花了一上午配售的渠道,以保護在上週五推出的纖維上半年,這給了一個該死的工作。 其餘的發射光纖的大問題,是它有即將展開的時候,有運動的人,撞傷可能會損壞它。 她要輕輕地釋放和保護,任何工作都可能受到影響。 那一刻來了只在下午晚些時候,給Pitaco用更少的人,我們很快推出其他纖維。 然而varamos夜間發射纖維。 指向盧西亞娜,改造後匿名在鳥巢,desembolou mafagafos最初的纖維束,並組織一個個都,大大加快了相同的事件後去除。

星期日 - 10/02/2008

Jantar 測試,修正,調整和相關設備。 一切應以工作無論在努力。 本次活動啟動的第二天。 我們的工作像太陽睡一會兒。 我們報導了我們在活動期間的工作班次。 六個工作從晚上23:00至次日下午7:00。 其他的變化,將保證基金會Vanzolini親切更名活動期間,由campuseiros,基金會,[不,我不會把它寫在這裡!]。

我們回家了同一個目標牢記:睡眠。 和我們唯一沒有在整個第二天。

星期一 - 11/02/2008,大日子

Antes de ser atropelado pela manada de Reporterontes 我們來到了剛剛正式開幕之前的事件。 我有正在運行的榮譽,幾乎被踐踏一群Reporterontes狂潮,伴隨著我們的文化部長。 我認為犀牛已經更加優美。 不像他們,部長是友好和禮貌。 應遵循的一個例子。

Abertura do Campus PArty Brasil 2008

從那裡,我們的工作晚上,並試圖抓住每一天的事件。 睡了嗎? “睡眠是懦夫!”,驚呆了哥倫比亞人的朋友:“巴西人是不是人”,他們的話......

傳統的覆蓋範圍:

週一週二週三週四週五

的鎮靜劑

雖然承諾在註冊過程中,沒有為那些有限制飲食餵養替代。 食物對我來說是好的,但許多素食主義者正確地抱怨,因為幾乎所有的肉,並收到響應嘲弄的微笑。 我已經看到了。 令人感到遺憾。 最糟糕的是,唯一的地方,在那裡出售的食物充電發財。 迫使參與者離開公園吃三明治,後來被禁止安全。 真丟人!

Sobras de brindes sendo recolhidas, com conteúdo descartado à esquerda 獎杯“的週美香”到一間電訊公司,該事件的主要贊助商,它不像其他公司在所有的事件,拒絕提出一個背包宣傳志願者。 最可笑的藉口:

“志願者無權使背包。 背包是付費用戶。“

OK,OK,他們應該算,對不對? 錯了。 許多誰仍然聚集在週日下午。 停止所有。 我申請作為志願者,帶來了來自遠方的朋友,以我們自己的錢,以幫助建立一個網絡基礎設施,是該公司的廣告。 然後我聽到了,我有沒有“正確”的敬酒。 首先,我們都是志願者。 我們願意去那裡。 不收費。 不期待任何回報。 然後一個小時,我站作為該公司的潛在客戶和事實上的徽章說:“技術援助”,也就是說,今天上午我花了幫助,以確保其他潛在客戶使用同一公司的網絡,我已“權利”訪問同一家公司的營銷材料呢? 有一點自相矛盾嗎?

這裡的關鍵是沒有問題,我想敬酒。 問題是,作為一個潛在的客戶,我完全忽略了,只是因為在事件的工作。 在“憲法”,它被稱為歧視。 從某種意義上說,我不會挨餓,因為他們不接受禮物,不花費超過$ 10.00,所以興趣不大,我隨身攜帶環保袋,​​免費宣傳,因為我用1泰格斯服務我非常好。 點是,由於這家公司是該事件的主要受益者,我覺得主要用於免費為自己的好工作。 這些和其他,我是不是他的客戶,去年,我不後悔。

這是一件好事:星期五,回家拿起盧西亞娜袋,將返回到聖靈在星期六凌晨。 我們結束了在午夜後抵達伊比拉布埃拉的。 當試圖進入3號門,像往常一樣,公園的安全性,聲稱已收到的訂單,不要讓任何人進入被禁止。 他們拒絕打電話給該組織,這是非常諷刺和不敬。 詳細說明:所有禁止和正確文憑徽章事件,誰是有工作的人,所有的人(15人)來自遙遠的城市和支付給睡在帳篷事件。 將無法進入睡眠。 有被拒絕入境的外國人睡覺。 我們有麻煩通過電話交談組織,因為手機沒有樓內工作。 結果:兩個小時,我們被禁止在門口,直到campuseiro陪一位女士來到出口和interou主體。 他趕緊跑的援助,並表示我們的同志。 15分鐘後,來到“神奇”為了讓大家來。 腳。 車停公園外,跟組織(他說他知道的任何命令),並發送回免費入場,現在的汽車。

遲到五分鐘罰款的另一個好:義工改變藍色的停車票。 你看,這傢伙離開家,去上班時伊比拉布埃拉免費心甘情願地購買整個珠粉色滑和免費罰款,遲到五分鐘延長車票已經支付。 沒有權利抱怨。 志願者停車無權...是軟的呢?

黨的備選方案:一類斧。 嚴重的是,沒有人值得! 在半夜! 更糟糕的是,它是公眾! 和公共有兩個版本...

不要得到與瘋狗圖片。 由盧西亞娜做到了! :(

積極點

Radar Saber M60 最大的,因為微軟的技術創新提出一個事件:隨著5.5Gbps可用的帶寬,它會導致以令人難以置信的空前盛事安裝光盤MSN。 我怎麼能住到現在為止,沒有它?

我參加會談的級別(無眠 :) )我相信,在與事件的焦點。

人群中的動畫。Patxi!!

瘋狗的存在。

查看我們的老朋友,巴西陸軍的軍刀M60的雷達。

馬克橋樑演講。 老實說,最令人驚奇的是我見過。 他讓我們感到驕傲,我們的努力,對自己。 只有聽到和看到他的眼睛閃閃發亮時,代表國家到一些獨特的意義時。 我無法用言語形容。 它是唯一的揚聲器到起立鼓掌數分鐘。 這是那些付出任何金錢的經驗。

我覺得最大的加點是有機會與來自其他國家的人交流經驗。 我們取得了很大的朋友,將永遠留。 我們了解到,除其他事項外,該語言將永遠不會成為障礙,只要有尊重和善意。 責任,友誼和承諾,可以使我們做的事情,我們通常認為不可能。 我們沒有講葡萄牙語,也不會講英語,沒有講西班牙語。 我們談論的東西,是充分發展的協同作用,使我們能夠實現我們的目標。

最重要的是,雖然他們通常不使用網絡基礎設施和支持,我們有樂趣。 甚至把夜間服務,即使幾乎沒有任何兩個星期的睡眠。 我們捧回校園黨是比黃金更珍貴寶藏。 沒有錢支付。

“請稍等片刻,”

我忍不住引用古斯塔沃,誰不說葡萄牙語,只有一個袖珍字典,從哥倫比亞來到。 第一天,我承認,我一看,以為“字典在手嗎? 但這不只是一部電影?“一個星期後的傢伙幾乎流利地講葡萄牙語。 我不聊天,西班牙是葡萄牙類似,這個傢伙談論真正的葡萄牙! 他堅持,直到成功。 注意。 有意思的是,聽他說,“請稍等片刻,短語,說:”每次他會尋找任何在字典中的字。

精加工

上週日下午14:00後,拆除所有的設備和收集的纖維。 撤銷是要容易得多......

晚上,雖然我們採取聖保羅的Perl販子社交聚會我們的外國朋友刺穿那一夜。

我感謝所有與我們合作,並給他們的汗水校園黨巴西是成功的。

可在這個環節的一些場景圖片。

在QT中,第二部分-啟動信號,槽和定時器

2008年2月1日,張貼在的C / c + +Qt的 · 查看評論

在這篇文章中,我也跟著遊戲使QT的初學者的小教程。 這一次,我將展示如何創建自己的信號和槽,以及如何處理計時器。

可以發現在這個鏈接的源代碼。

示例程序將使用類QTimer的 ,其中一個主要的QT類是一個定時器,將使用類式液晶顯示計算器QLCDNumber的顯示時間。

QT和定時器

在QT的最基本的支持定時器是從QObject類,它提供的方法startTimer :: QObject的()QObject的:: KillTimer函數() 第一個方法返回一個唯一的ID,第二個定時器結束定時器通過這個ID。

對於這個工作,但是,使用這種機制的代碼片段,需要內部“事件循環”。 (超時)的那一刻起,啟動計時器不時使一個的應用dispate QTimerEvent ,擾亂,直到事件處理程序的正常流動。

然而,最大超時沒有被定義,並能創造年超時定時器,最短的時間可以從系統到系統的變化。 在Windows Vista中最低的定時器是10毫秒,而在Linux 2.6.x的配置(默認是4毫秒)。 Qt將試圖提供所有活動的要求,但如果系統不允許將丟棄的“過剩”。

定時器也可以被用來在線程,但你必須履行的一個事件循環內的要求。 主題應該有一個單獨的文章,總是...

QTimer的定時器實現了較高的水平,使某些功能。 其一是QTimer的:: singleShot() ,觸發一次事件。

閱讀大量的文檔和重複,乏味,但相信我,你會節省很多的QDorDeCabeca ...

信號和槽

用於對象之間的QT的基本組成部分之一,通信信號和槽。 在這個系統中,而不是實現回調來處理事件,我們使用的連接信號和槽的概念,使編程更加直觀。

信號和槽類是由元對象編譯器(MOC)前處理方法的源代碼被編譯。 他們有特別聲明,不屬於標準C + +的,所以fazum MOC解析的源代碼,並生成編譯。

當您運行商務部在任何類,它實現信號和槽,產生一定量的源代碼。 使用qmake的程序,商務部的調用程序的Makefile承擔,使它透明程序員。

對於一個類可以實現信號和槽,它需要的元對象系統的訪問。 所以應該從QObject的類及其子類繼承,需要有宏Q_OBJECT您所在地區的隱私聲明。 準備工作完成,信號被宣布部分和槽“公眾保護|私人槽”一節的“信號”。

後宣布的槽,然後定義為任何其他常見的方法,可以像任何其他明確要求。 已有跡象都更細膩一點,永遠只由程序員定義和聲明。 什麼原因? 這在企圖建立的消息:

 tmp / moc_mydisplay.o中:在函數MyDisplay :: signalPlay()“:
 〜/秒錶/ TMP / moc_mydisplay.cpp:89多個定義:從:: MyDisplay signalPlay()“
 TMP / mydisplay.o:〜/秒錶/ mydisplay.cpp:169:第一次在這裡定義
 collect2:ld返回1退出狀態
 :** [秒錶]錯誤1

內產生的文件moc_mydisplay.cpp以下代碼:

  / / 0信號
 signalPlay ( ) 無效MyDisplay :: signalPlay()
 {
     activate ( this , & staticMetaObject , 0 , 0 ) ; QMetaObject ::激活(這一點,與staticMetaObject,0,0);
 } 

是的,建設部產生所謂的QT元方法的定義的信號。 因此,定義一個符號的身體是非法的CT和reset方法將產生一個編譯錯誤。 讓MOC需要照顧你的信號執行。

它沒有使用剛剛設置的信號和槽。 你必須確定他們將如何相互作用。 是整個這個繼承人的connect()方法通過連接他們 QObject的方式做到這一點。 此,商務部將實施的信號,所以它在調用的結果(S)的調用插槽(S)連接使用相同的參數(S)。

取決於連接,信號甚至可以返回相同的值作為最後的插槽叫回來。 請注意,這是不是很安全的連接到多個插槽的信號,因此,沒有任何保證調用的順序。

一個給定的信號可以直接連接到第二個信號。 一個發射(第一信號)是那麼相當於以發出(第二信號),而創造的MOCS,在第一,第二次通話,導致連接到其他方法的要求,和等的呼叫結果的步驟後

連接的方式

基本上有三種方式連接信號和槽,如果不正確使用,可以是一個非常難以發現的錯誤源。 通過這些形式連接connect()方法的額外的參數。 它們分別是:

直接連接 :立即在發出信號的線程發出信號已經被稱為插槽。 作為直接調用插槽。

排隊的連接 :信號發送和調用插槽內部列表的QT,信號立即返回,無論插槽被稱為與否。 然後將田賽處理這個名單,後來才調用線程對象所在插槽插槽循環。

自動連接 :這是用來當你不指定的連接類型,默認類型。 它是一個“邪惡的種子” ,它提出了兩種不同的行為:如果駐留在同一個線程中的信號和槽,可以直接連接,但除此之外,它的工作原理為排隊的連接。

阻止排隊連接 :嘿! 是不是只有三個? 嗯,這是一個讀這篇文章的優勢:節省您的文件不一致的! 這個連接是類似排隊的連接,但信號的線程被阻塞,直到信號被正式執行。 注意,只應使用非常小心,並在不同的線程的信號和插槽。 濫用也可能導致死鎖。 你就會知道,當你看到這樣的事情:

用戶@主機:$〜/秒錶/秒錶。
 QT:死鎖檢測,同時激活的BlockingQueuedConnection:發件人是
 QPushButton(0x807e2d8),接收是MyDisplay(0x8076ac0)

為了解決何謂“線程”到的QT arespeito線程是指一個對象所在的疑慮。

信號,槽,線程和定時器,始終以極大的關懷。 這是QT的主要特點,但其濫用可導致錯誤非常難以找到的。 看到所有關於它的文檔。

到源

我們的例子是兩個階級,秒錶MyDisplay文件和主要共同組成。 主,只創建一個QApplication對象秒錶。 類需要照顧MyDisplay程序組成的一個按鈕和一個液晶顯示屏風格的對話框,視覺部分。 秒錶類將創建一個widget顯示和執行計時器。 請注意,這個架構是不是最elegente,更有趣的類秒錶MyDisplay的繼承。 但是,這會破壞遊戲,幾乎無需使用信號和槽。

信號和槽的使用變得更清晰,當我們要與外界溝通的對象。 在一般情況下,類不知道什麼是外。 他們通過內外部對象的指針,它傷害的封裝,使代碼通用。 在我們的例子中,更有趣的是使用信號和槽myDisplay對象(內部秒錶)報告事件/對象秒錶(外部Mydisplay),而這在一般性或失去封裝。

隨著Qt Designer中(在另一篇文章中,我將討論)的幫助下,我創建的對話框,按鈕和LCD。 經過簡化的代碼,以滿足我們的目的。 如何myDisplay從QDialog的繼承,這間接繼承自QObject,使用添加Q_OBJECT宏在類聲明的私有部分的信號和槽。 之後,在其他輔助補充,方法:

  公共插槽:
     long ) ; slotDisplayValue無效(長);

 私人插槽:
     slotPlay無效();
     slotStop無效();

 信號:
     signalPlay無效();
     signalPause無效();
     signalStop無效();
     signalReset無效(); 

跡象傳達給相關的按鈕點擊的外部事件。 已經私營槽將前處理過程,而公眾有權從外部計時器刻度。 因此,類的信息發送到外面,並接收來自外界的信息,不知道對方的。 好老界面合同。

  公共插槽:
     slotPlay無效();
     slotPause無效();
     slotStop無效();
     slotReset無效();

 私人插槽:
     slotTick無效();

 信號:
     long ) ; signalTicks無效(長); 

模擬和相反的StopWatch類實現插槽,收到信號MyDisplay類,並宣布公開其插槽的信號發送信息。

它還實現了一個QTimer將火每隔10毫秒(讓我們的朋友可以遵循lerdinhos Vista的!),計數器遞增。 這個計數器被送回的顯示格式和顯示。

定時器可以停止,暫停,並隨時通過點擊相應的按鈕,重新啟動。

在Finalmentes

這個例子本身是沒有多少代碼,但它說明了最基本的使用定時器和自定義信號和槽建設。 然而,一個非常特別的關注,應考慮到細節,涉及利用這些資源,他們可以成為致命的陷阱。

重要環節

信號和槽
QTimer的
在QT螺紋
聯機文檔的QT