WHAT'S NEW?
Loading...

胖子工程師辛酸史:交流與分享

上次胖子與工程師B談過後,他深思熟慮定下五年後一定要成功當上外商主管,然而他發現工作以來只專注做好公司的事,反而對業界沒有一定的了解,後來胖子讀了無瑕的程式碼(Clean Code)這本書,他想從當一個專業人士著手.

胖子看到書中說寫程式碼應該讓團隊其他人看懂,他心想工程師B應該能給他很好建議,又加上公司現在將程式碼使用Git做版本控管,因此他又約工程師B一起吃午餐......

胖子:"工程師B,最近我們的程式碼有進行版本控管,你有看過我的程式碼嗎?"

工程師B:"恩...之前增加資料可視化時,我有看過你的程式碼."

胖子:"那你覺得我的程式碼容易讓人看得懂嗎?"

工程師B:"恩,還可以."

胖子:"其實我最近看了無瑕的程式碼,我一直覺得自己程式碼架構不太好,你覺得我程式碼最大缺點是什麼?"

工程師B:"恩....我也看過那本書,其實目前團隊程式碼的相依性太高,說實話很難維護."

胖子:"那你覺得我們對目前的程式碼進行重構如何?"

工程師B:"然而,目前另外兩個新人工程師的程式碼可讀性很低,我想短時間無法解決程式碼相依性問題."

胖子:"的確,那我們進行Code Review如何?我們先找出問題比較嚴重的地方,然後每個人都針對這部分進行重構,並且在下班前30分鐘開會時,請每個人用五分鐘解釋他做了什麼改善."

工程師B:"雖然你這個想法很好,但我不認為老闆會給我們時間做這些,而且最大問題是專案經理那邊"

胖子:"或許我們在開會時候,我們合作想辦法不要讓時間表不要那麼忙,讓我們團隊至少每一周一次進行重構,而且上次老闆也說希望提升工作效率,其實在那本書也指出雜亂的程式碼會使團隊的產能降低,因此我覺得或許應該跟老闆說重構能使團隊工作效率上升."

工程師B:"恩,我是沒問題."

與工程師B談完話以後,胖子覺得今天做了很棒的交流,雖然不知道這件事能不能成功執行,然而結對工作(pair-programming)應該能花比較少時間重構團隊的程式碼,一方面能讓團隊之前互相知道彼此的工作,另一方面能讓團隊一起成長.


作者有話要說:

最近我看了無暇程式碼,此本書主要說明如何寫出清楚與整潔的程式碼,並且在番外篇著重在職場求生術,我覺得就算你不是程式設計師都應該看一看,這才是真正成功的人的做事態度.

這本書讓我印象深刻的是專業人士不要怕分享你的技術,而且願意讓其他程式設計者修改你的程式,而這也是我本身最大的缺點.雖然有人問我程式相關問題,我會回答有關我程式邏輯問題,然而要我詳細一點就懶得回答.或許身邊的人只在乎如何防其他公司偷自己程式碼,卻不願花時間與其他公司或團隊交流技術,甚至想依賴這些技術過這一輩子,我漸漸懶得分享我的想法或意見.然而,身為旁觀的我,我覺得這樣作為就是因為自己沒有隨時成長和害怕被人取代,所以才不願分享.總而言之,當你不願跟他人分享知識時,你應該自我思考這段時間自己有沒有成長. 畢竟現在社會很競爭,說實話世界上有很多人比自己強,然而跟別人比很痛苦而且比不完,因此最簡單的方法就是跟過去的自己比較,不但能檢視自己的能力,而且也能增加自信.

說實話我經常對自己方向迷惑過,然而台灣的亂象讓我找不到自己的路,我有自己的理想,但是身邊的人經常說我想太多,然而身邊的人遇到職場的不公平時,他只能自我解嘲外面公司也一樣,然後繼續埋頭苦幹自己的工作,但是不公平持續存在著,說實話只做別人交代的事卻忘了隨時自我成長,然後說服自己待在這個環境,他久了以後將跟機器人沒兩樣,機器人無法抱怨人類給他太多負荷的工作,他只能一直工作直到人類用壞它為止. 因此,為了不成為別人的奴隸,自己應該思考如何擺脫困境,我覺得無瑕的程式碼是滿不錯的書.


延伸閱讀:
  1. 目錄-人文素養
  2. http://chenglearning.blogspot.tw/p/blog-page.html

壓抑的台灣:與人交流節省你的時間

圖一. 待宰羔羊的低頭族(source:Pedestrian Council of Australia's campaign)

在上一篇快樂的方法(3): 停下來, 看和前進,我利用職場生態來解釋講者David Steindl-Rast的概念,然而在資訊爆炸時代,人們越來越追求使用科技產品節省自己時間,然而據我觀察的結果,我對智慧型手機能增加工作效率是感到存疑的.的確,對某些人來說科技產品能讓他有效運用時間,但是對一些人來說低頭的時候,他不知不覺可能錯失某些機會,因為他拒絕與周圍的事物進行交流,因此他在處理某些事物上感覺很沒效率.總而言之,我接下來將描述當你不與身邊事物交流時,你可能會浪費多少時間.

有一天,我走到中華電信申辦試用無線網路服務,由於要等很多時間,因此我開始觀察我的周圍,我發現門口站著一位客服小姐等著人問問題,沙發上坐著已經取票的顧客,然而當號碼叫到其中一個顧客時,他上前詢問櫃檯小姐他的手機有點問題,結果她叫他到後面不用號碼牌的手機櫃檯去處理,因此他浪費了半個小時傻傻坐在那邊等號碼.這裡我想表達的是如果此顧客進來就問門口的客服小姐,他只要十分鐘就能解決此問題.因此你可以回想當你到銀行,醫院, 電信..等地方,有多少事情只要使用客服就能解決的事?或許你覺得害羞,因此你經常使用智慧型手機搜尋答案,但我認為員工應該最清楚這些事務,而且現在是顧客至上的時代,因此客服通常都需很親切對待你,如果你不清楚該公司處理流程,你主動去問客服才能節省你的時間.

還有,你觀察圖一暗示低頭族就像盲人在過馬路,甚至發生交通意外而死亡.換句話說,當人低頭看自己手機時,他可能當下忘記自己要做的事.最典型的例子,學生在上課時玩自己的手機,不但拒絕跟老師溝通與交流,而且也喪失最佳學習的機會.其實,我提過大學在上電子學時我都坐前面,說實話那時候上課認真聽講,因此我不用花很多時間準備考試,所以我還有閒餘時間做其他事.為什麼我會舉這個例子呢?最近我看到公司的徵才廣告,程式設計者要求真是很多,我想一般大學生真的很難做到(包括作者本人),尤其越來越多公司要求GitHub的帳號,因此我建議大學生不要沉迷於手機,請主動找幾個好友一起將你們所學到的東西寫成程式再上傳到GitHub,一方面學生比起上班族有多餘空閒時間,另一方面出去找工作有談判的籌碼.

我曾經聽過當老師的朋友說過,現在學生的素質越來越差,說實話智慧手機功不可沒,有太多的東西使這些孩子們分心,還有在台灣又沒開課程教學生如何自我管理和時間管理.以前我那個時代只有筆電時代,讓我可以專心念書,然而現在學生為了追求流行,反而不知不覺浪費許多時間.其實加強自己能力比起盲目追求科技產品重要多了,畢竟科技產品只是工具罷了!

延伸閱讀:
  1. 目錄-人文素養
  2. http://chenglearning.blogspot.tw/p/blog-page.html

Qt物件導向:重載函數(overloading function)

在C++,我們通常定義函數由名字(name),回傳類型(return type),參數列表(parameter list)和虛擬碼(pseudocode)所構成,而重載函數(overloading function)發生在當兩個函數以上使用相同名稱,卻有不一樣的參數列表,但是回傳類型在重載函數是不被考慮的.換句話說,C++編譯器決定使用哪個重載函數是根據傳入的引數(argument)符合哪一個參數列表來決定.

圖一.類別YTDBConnection內成員函數未使用重載

在上一篇QSqlTableModel與QTableView連結,圖一顯示YTDBConnection增加成員函數getTable,在這裡我將getDataList和getTable改名為getData,然後我的主程式時呼叫相同名稱的成員函數時,在圖二的程式碼第17列(row)由於傳入的引數是字串陣列,因此呼叫getData(QStringList &d_list)將從資料庫取值存到一維字串陣列裡.

圖二.類別YTDBConnection成員函數使用重載getData

圖三.在mainwindow.cpp使用重載函數
使用重載函數的優點

  • 主要增加程式的可讀性,例如你要實作整數和浮點數的加法時,由於只是傳入的引數不同,使用相同名稱的函數比起使用不同的函數比較不會造成代碼混淆

GitHub程式碼

  1. QtTutorial / QtProject
    • 這次的重載練習更新在QtProject,你可以看commits觀看程式變化


Chrome擴充套件開發:載入官方範例進行測試

在上一篇介紹雙重畫面觀看(Dual View)功能使用到JavaScript的技術,然而若你想要自己寫JavaScript增加到Chrome瀏覽器,你需先學會如何寫擴充元件(Extensions),然後再啟用開發者模式(Developer mode)進行測試. 另一方面,你也可以利用建立Extension練習網頁程式語言(HTML, CSS, and JavaScrip).而有關Chrome擴充元件開發,今天主要教學先從官方網站下載測試範例後,Chrome載入此範例後檢視結果.

     圖一.成功載入測試範例

載點

教學影片


教程
  1. 首先, 請到載點然後點選「My Bookmarks」後,下載測試範例basic.zip並解壓縮.
  2.  
    圖二.下載擴充元件開發-書籤範例

  3. 接下來,請用以下的方法進入Chrome擴充元件,啟用開發者模式Developer Mode」.
    • 點選後,選擇「Tools」→「Extensions」

    圖三.啟用Chrome的開發者模式

  4. 接著, 請按下「Load unpacked extension...」,選擇測試範例basic資料夾所在位置,按下「OK」鍵載入此範例.

  5. 圖四.載入測試範例


  6. 最後,如下圖所示成功載入此書籤範例.

  7.  圖五.成功載入測試範例

延伸閱讀


快樂的方法(3): 停下來, 看和前進

圖一.微笑的裝置藝術(source: postitwar.com)

之前有關快樂的方法的兩篇文章是我根據Ted演講「Want to be happy? Be grateful」將台灣的故事結合講者David Steindl-Rast的概念,然而這段演講對我印象最深刻的句子是『Stop, Look, Go』,而中文意思就是停下來,看和前進.說實話,我經常看到身邊的人工作埋頭苦幹,他們從來不知道停下來,或許將東西做到完美是值得讚許的工作態度,然而你知道這些人可能會錯失許多成長的機會.我想用本身的經歷提醒讀者不要再錯失身邊的機會.

首先,我曾經參與大學專題做有關人臉辨識系統,那時我埋頭苦幹埋趕自己的專題進度,自己卻不思考如何向別人報告自己所做的內容,因此有一天當我向專題老師報告時,我當場在實驗室狠狠被教訓一頓,我想我永遠無法忘記老師說的話.他說:『我知道你很認真做這個專題,然而你如果不會報告,別人如何理解你在做什麼?你做得再多,如果不會表達自己的東西,這東西就沒什麼用.』 當時的我能理解老師的訓話,然而我從未認真去改善自己的缺點,直到我進入職場,我才發現人真的不能只會埋頭苦幹,如果自己不思考再開會如何向上司或老闆自己做了什麼,他們就無法了解自己的能力.換句話說,每一次開會都是展現你能力的機會,如果不停下你目前的工作,然後思考如何報告你做了什麼,你就喪失讓別人了解你的機會,甚至喪失升官加薪的機會.

另一方面,人其實不能一味追求成績的高低,而是與人去分享或討論的你意見.我曾經在大學的電子學常常坐前面的位置,而且喜歡敲老師的門詢問我不懂的地方,因此老師很喜歡上課找我回答問題,然而有一天我考得很低,老師仍然繼續給我些寶貴的意見,甚至鼓勵我上課回答問題,他並沒有成績差否定我的能力.換句話說,即使你表現不好,你仍然要鼓起勇氣與老闆分享你的想法,而不是只傻呼呼做上面的人交給你的工作. 若想要老闆對你改觀,你更應該不要害怕接近老闆,而是把握與老闆溝通機會去表現自己.畢竟職場不是學術界,老闆無法像老師一樣一一理解底下的員工.

最後,有時看到身邊的人常常猜測別人的想法,反而鼓不起勇氣跟別人交流,因此他常常喪失一些寶貴的機會.說實話,我經常為這些人感到可惜,因為有時我看到某些台灣東西做得比國外好,然而他們卻輸在不會宣傳自己.若你想要改變目前的工作現況,我建議你學會如何宣傳自己,因為表達自己能力在這個資訊爆炸時代是多麼重要 若不知道如何做,你可以先停下你目前的工作看看你的周圍,尋找這個時刻給予你的機會,而當你得到好結果不要猶豫前進吧

胖子工程師辛酸史:心態調整

上次胖子與專案經理的職場對決,雖然胖子占了上風,然而不知專案經理如何跟老闆報告,因此他被老闆叫去辦公室約談....

老闆:"胖子,我知道你們資訊組很忙,然而我聽專案經理說你們都不想學習新東西,是嗎?"

胖子(心理OS):"︿ 我就知道老闆要跟我說這件事...."

胖子:"老闆,由於最近忙於規劃FakeLemon計畫案和接新案子,所以才沒答應專案經理的要求."

老闆:"胖子,你知道我們公司一直計畫打入中國市場,而且中國那邊有公司希望與我們合作,因此在這艱難創業時期,團隊應該一起合作提升自己,說實話等公司壯大以後,我想把你提升為主管,然而你沒有隨時精進自己的專業知識與能力,如何成功領導你的下屬?"

胖子:"老闆,我知道了!"

老闆:"這次你就跟專案經理去聽Scrum課程,但我希望你下次能自動自發學習新東西,不要每次拿工作多當藉口!"

胖子:"是,老闆"

走出辦公室的胖子感到很沮喪,他突然不知道自己工作目的是什麼,說實話他能理解老闆說得話,然而每天他都處理專案經理丟過來的鳥事,甚至連學新東西責任都在他身上,他突然感到壓力很大需要跟人討論.

剛好此時是中午時間,胖子不經意看到工程師B正要走出去吃飯,因此胖子小跑步到工程師B身邊...

胖子邊用期待眼神邊說:"工程師B,你一人吃飯也太寂寞,我們一起吃吧?"

工程師B看著胖子眼睛思考了一下後,說:"好吧!"

胖子(心理OS):哈~~想不到自己的眼神攻勢如此成功(^o^) ,上次雖然成功邀請工程師B後,可是之後他仍然板著一張臉,所以自己都不敢再邀請他!

當胖子與工程師B點餐時,胖子思考如何說自己的煩惱,畢竟有關公司的話題,如果讓人誤解就不好了.

目前,胖子與工程師B面對面坐著吃飯..

胖子:"工程師B,你覺得我很不上進嗎?你也知道公司要進入中國市場,我們資訊部是不是要自動加班?"

工程師B:"胖子,你的夢想是什麼?"

胖子0.0 :"現在不是在討論公司方向嗎?"

工程師B搖著頭說著:"現在我們工作是幫助老闆完成他的夢想,而公司的未來方向應該不是你的夢想吧!"

 聽到這句話的胖子不禁陷入沉思,他的確很久沒想起自己的夢想,工作的忙碌漸漸讓他喪失自我,其實他的夢想就是希望自己的薪水能越來越多,然後讓爸媽過好日子吧!說實話,他本身也喜歡寫程式,因此他了解自己需要不斷精進技術才能加薪.

胖子:"我希望有一天能到外商公司當任主管!"

工程師B:"那你應該去看這些外商公司的徵才需求,然後針對不足部分進行加強吧!"

剩下的午餐時間,胖子思考他與工程師B的對話,說實話老闆應該對他訓話,然而公司何嘗也沒有採納自己的意見,因此他何必那麼在乎老闆的評論呢?而且,他不是那麼排斥學Scrum,又加上向老闆表達參加課程的意願,因此他認為自己有精進自己專業能力,只是比較慢而已.

最重要的是,如果他分心學新東西,反而讓自己目前的手上程式有許多bugs,他想這才是真正的本末倒置吧!事實上,他目前的程式的缺點就是程式架構很糟,對於目前的他這才是第一件要解決的事.

作者的話:

你曾經會不會因為上司訓話而感到沮喪?

其實,我朋友曾經跟我訴苦老闆一直跟他談論理想,然而公司制度讓他覺得無法達成,可是有人跟老闆反應,然而就像文中的胖子一樣完全無下文,我朋友真的感到有心無力.或許底下員工應該自己主動去推動這些技術,然而老闆身邊的元老反彈,反而裡外不是人.後來,我看一些職場書籍,我發現不應該把時間浪費搞這些沒人接受東西,還不如好好檢視自己有哪些不足的地方.

其實我的意思不是只在乎自己,而是當自己跟公司反應後,若公司沒有任何作為或給你權力做這件事的話,你應該把重心移到精進自己的能力,畢竟自己能力不足,公司也無法安心把事情交給你.總而言之,老闆說得每件事不是傻呼呼接受,使自己累得像狗一樣,甚至每件事都是囫圇吞棗,使自己無法成長.

Qt函數:QSqlTableModel與QTableView連結

在上一篇Qt入門篇(4): 建立存取資料庫的類別,我主要設計資料庫管理類別,然後在主程式初始化此類別,也就是說使用物件存取資料庫.而這次我將在類別YTDBConnection中的增加成員函數『getTable』將從資料庫Taiwan撈取資料表「Taiwan_PostCode」進行篩選後,利用QTableView顯示其資料.

圖一.存取資料庫類別YTDBConnection

在這次範例,我使用SQLiteStudio在SQLite資料庫Taiwan新增資料表「Taiwan_PostCode」,主要紀錄郵遞區號,縣市,鄉鎮區和鄉鎮區英文,你可以到GitHub進行下載與練習.

\圖二.資料庫Taiwan增加資料表「Taiwan_PostCode」

程式碼



教程

  1. 首先,請先宣告QSqlTableModel(資料庫專用的表單),然後選擇要從資料庫Taiwan抓取資料表,這裡以「Taiwan_PostCode」為例.

  2. QSqlTableModel *model=new QSqlTableModel(0,db);
    model->setTable("Taiwan_PostCode");
    

  3. 接下來,由於輸入參數字串currentText是QComboBox目前顯示的內容,這裡的範例是使用台灣縣市,因此使用篩選只取出此縣市相關資訊.

  4. model->setFilter("City_CName='"+currentText+"'");
    

  5. 然後,請將輸入參數QTableView設定資料來源後,即可顯示所抓取的資料.

  6.  srcTable->setModel(model);
    

  7. 最後,以下為執行結果.


Reference:
1. QtSql 5.0: QSqlTableModel Class

讓Chrome具有雙重畫面(Dual View)功能

最近在Google Chrome Dual View[1]發現如何讓Chrome具有雙重畫面功能.其實無須安裝Extensions,你只要按一下啟動JavaScript後輸入兩個網址,他將自動把畫面一分為二. 而這樣的好處,你可以針對不同搜尋引擊進行探討和研究.這次我將針對關鍵字Chrome對yahoo和baidu進行搜尋結果的比對.

教程影片



設置教程

  1. 首先, 請將滑鼠移動到雙螢幕觀看後,在此連結上按下滑鼠左鍵後,啟動JavaScript
  2. 雙螢幕觀看
    
     
    圖一.啟動「雙螢幕觀看」的功能


  3. 然後,請先輸入左邊畫面的網址,這裡我以百度搜尋為例子,然後按下[OK]鍵.

  4. 圖二.輸入左邊畫面的網址列


  5. 接下來,請先輸入右邊畫面的網址,這裡我以yahoo搜尋為例子,然後按下[OK]鍵.

  6. 圖三.輸入右邊畫面的網址列


  7. 最後,成功讓Chrome畫面一分為二.
  8.  
    圖四.Chrome雙重顯示功能

Reference:
1. CHROME BLOG, Google Chrome Dual View

胖子工程師辛酸史:勇敢說不

最近團隊開始進行程式碼的版本控管,然而專案經理竟然開始以程式碼的多寡來評價工作效率,胖子感到很無言,因為他寫程式時會使用UML去記錄他所建立的類別和描述類別之間的關係.雖然他曾經跟公司建議將此功能流程化,但是老闆以工作繁忙拒絕胖子的建議.

然而,胖子思考和檢討自己程式技巧,他常常為增加新功能所困擾,甚至經常加班.其實問題就出在胖子程式架構寫得不好,為了提升自己工作產能,胖子仍然堅持自己要做到這件事.

今天胖子又被專案經理叫去討論資訊組工作效率的問題...

專案經理:"胖子,你們資訊組這樣工作效率真的不行!這次你們資料可視化功能也花太多時間吧!最近業界很流行Scrum,我聽說它可以提升我們資訊組工作效率,胖子你去了解一下後提交計劃報告給我!"

胖子(心理OS):╯︿╰ 我對這個東西也不熟!突然要接也太困難了吧!而且,這也是你的工作項目.....還有我們公司連UML流程化都困難重重,Scrum會成功嗎?

胖子:"經理,很抱歉,我是很想去了解Scrum,然而我對Scrum完全是門外漢.又加上,最近不但要趕FakeLemon的計劃案,而且要接新計畫案,你也知道資訊組加班很兇,我實在找不出時間去規劃計畫案."

專案經理:"胖子,Scrum應該由有資訊組的來搞才對啊!這是你們的職責吧!"

胖子(心理OS):@_@ 我就知道你會這麼說.....幸好我有先做功課,而且我接這工作,功勞還不是你的!

胖子0.0   :"經理,其實我聽朋友上過Scrum敏捷方法實作班,課程說不需具備程式背景,我想你可以跟老闆報告去參加,專業的人比起我這個門外漢好吧!"

專案經理:"胖子,這是很好學習機會,你一直推脫如何成長?你這樣學習態度是會被職場淘汰!"

胖子(心理OS):= = 這對你來說,難道不是很好學習機會嗎?而且控制權掌握在你身上,我去學還不是被架空!

胖子:"經理,要不然我們跟老闆說一起報名此課程,到時候你跟大家報告計畫案,我可以幫你補充說明."

專案經理(︶︿︶): "好吧!我會跟老闆報告."

回到座位的胖子邊照鏡子邊佩服自己實在太厲害了>﹏<,他自認為將了專案經理一軍.雖然結果他也要參與此課程,然而他不但可以學習新的東西,而且也拒絕屬於專案經理的工作.如果老闆到時候叫他搞Scrum,至少有前人先做過經驗,他有空檔將這東西模熟並且做到更好(^o^) .

作者有話要說:

你曾經害怕拒絕說不嗎?

其實我在輕重緩急描述過我身邊工程師不懂得拒絕同事,結果老闆對他的印象非常差,甚至稱此同事為爛好人. 然而你知道懂得說不,你才能擺脫小螺絲釘的角色,而且也才不會阻礙你的自我成長.就像文中的胖子,他很清楚目前自己的缺點是什麼,所以當專案經理跟他提要求時,他會分析自己的狀況跟經理談判,而且他很清楚老闆現在將工作效率問題交給專案經理處理,又加上他對這事物不了解,因此他決定先看看專案經理實作後,他再好好檢討資訊組的工作效率.

說實話,在25歲前一定要學會的拒絕力中, 勝間和代指出你不說不並不會讓同事尊重和喜愛,而且同事討厭你有時沒有理由,因此說不其實跟討厭沒有關係.如果你不會拒絕的人,我會建議你閱讀此書擺脫當一個職場小螺絲釘.

Reference:
1.勝間和代, 25歲前一定要學會的拒絕力
http://www.suncolor.com.tw/event/kazuyo2/

Qt入門篇(4): 建立存取資料庫的類別

在上一篇Qt入門篇(3):連結SQLITE資料庫,我簡單實作如何利用Qt連線到sqlite資料庫,然而我未建立資料庫管理類別,也就說此資料庫操作只能在mainwindow.cpp使用,因此為了使資料庫管理能再任意位置都能被使和更容易維護和擴充我們的程式碼,在這裡我將資料庫操作的設計成類別[YTDBConnection],如圖一所示.有關類別相關的解釋,請參考Qt之物件導向:什麼類別?.類別YTDBConnection主要處理資料料庫連線並取出我們所要的資料,而此類別詳細說明如下:(這些說明我們通常定義在標頭檔YTDBConnection.h,如圖二所示)
  1. 資料成員(data member) 
    • db:QSqlDatabase
  2. 成員函數(member function) 
    • OpenDB(): 設定資料庫類型和名稱,並且開啟資料庫.
    • CloseDB(): 關閉資料庫連線
    • getDataList(QStringList &d_List): 得到字串陣列的台灣城市資料
圖一.資料庫連線的類別

圖二.YTDBConnection.h-描述類別的構成

程式碼

由於此範例只是簡單實作,你可以參考Reference將類別修改成你要的,尤其在偵測作業系統的版本. 

類別說明

  1. OpenDB():連線到範例Taiwan SQLite資料庫

  2. 圖三.成員函數OpenDB

  3. getDataList(QStringList &d_List):得到一維字串陣列的台灣城市資料

  4. 圖四:成員函數getDataList

Reference:

1. Creating an SQLite database in Qt
http://developer.nokia.com/Community/Wiki/Creating_an_SQLite_database_in_Qt
2.Searching for data in a database in Qt
http://developer.nokia.com/Community/Wiki/Searching_for_data_in_a_database_in_Qt

快樂的方法(2):感激的意義與影響力

圖一. 感激的意義(source: photobucket)

最近我發現大醫院的外科醫生經常從早上看到下午,這些醫生大部分都有一定的年齡和資歷,然而我越來越擔心台灣的外科,因為目前外科目前是靠這些有經驗的醫生在支撐著,然而台灣亂象讓年輕醫學生不敢當外科醫生.後來我想到之前在你想要快樂? 開始感激吧!,講者David Steindl-Rast提到,感激能讓人們感到事情的重要性,或許能改變我們的環境,因為感激能讓你不再害怕和暴力,而且你會享受人與人之間的差異性,甚至自然而然尊敬每個人.換句話說,如果你多一份感激或許降低年輕醫生對外科的恐懼,而且產生愉悅的工作環境.因此,我將利用我所觀察的台灣醫生故事解釋感激的概念.

首先,我們如何感激地生活?藉由經驗,開始察覺到每一個時刻是被給予的時刻,每個時刻都會給予你一個機會,也就是說,每一個時刻都是一個禮物,而這個時刻將給予你機會和經驗.就像台灣不健全的健保制度,雖然讓台灣人享受地便宜的醫療,然而分配不均使得外科醫生不但工作辛苦和風險高,而且賺得錢比起醫美少得多,因此目前當外科醫生是有熱情為這個工作犧牲奉獻,所以我們應該感激這些醫生犧牲和奉獻.或許你覺得這些醫生過得比自己好,然而我就遇過一個中年醫生每天巡房到半夜12點,甚至在某一天累到住到加護病房,結果一個月後繼續恢復看診,然後有人問他為何不好好休養?此醫生回答說:"沒辦法,我的病人都在等我,而且我也擔心病人的狀況." 由此可知,這些外科醫生多值得我們尊敬,雖然他們賺得錢比一般人多,然而他們也失去家庭生活和好的生活品質.我想台灣人應該瞧不起那些炒房價的商人們,而面對這些醫生請多一些感激,我想你給他們忙碌一天一些溫暖.

接下來,請不要感激暴力(violence ),戰爭(war), 壓迫(oppression)和開發 (exploitation).還有也不要感激失去朋友(friend),異心(unfaithfulness),傷親之痛(bereavement).說實話,有時候我覺得台灣媒體以看熱鬧的態度挖出別人不幸,從來不先了解造成事情的原因,而是先挖出這個人還有什麼有趣的新聞,因此經常模糊焦點,甚至讓台灣人不懂得感激,反正只要有什麼不滿就跟媒體爆料發洩.說實話這些與感激相違背,別人的不幸應該給予他們空間去處理,還有在跟媒體爆料前,先自我反省自己是否有錯的地方,要不然只是把衝突幫到檯面上罷了!我想也無法解決事情的根本問題.接著我想講一個小故事,讓你了解事情對錯取決在於你自己的態度.

有一天,親人在醫院需要開高位脛骨截骨手術,由於腳需要矯正所以需要開兩次刀,因此她感到憂鬱和不高興,因為她認為醫生沒事先告知她.事實上,親人本身也有問題,她很不愛跟醫生聊天講述自己的病情,甚至沒問清楚休養時間就跑去工作,因此她不得不開第二次刀.然而醫生並沒有責怪她,因為這是雙方都有問題,醫生很忙無法一一詳細詢問每個病患的病情,而且醫生又沒有讀心術無法知道病患私下做了什麼.因此,我建議看病時別當沈默的病人,請主動跟醫生聊天和告知你的病情,醫生並不是神能猜出你的想法,如果你不說話只用期待眼神等著醫生救你,我想不造成醫療糾紛都難.

後來,親人遇到相同的病患,而這個病患很開朗告訴她相信醫生就對了,醫生絕對幫你把腳用到好.我覺得這個病患態度值得我們學習,當然不是盲目相信醫生的醫術,你可以先選擇聽不同醫院的醫生建議後,而當你決定哪個醫生幫你治療時,你應該相信、尊重和感激醫生的治療.其實這個醫生就是住到加護病房的那位,後來聽我親人說醫生每次講到治好哪些病人很有成就感,而且每次她都看到好多病人聊天的內容都是感激醫生.我想就是有這些感激的病人,即使醫生自己未休養完畢,他仍然堅持恢復看診.

總而言之,希望台灣人多些感激看待外科醫生,而不是每次出問題,使外科醫生成了萬夫所指的境地,當然外科醫生有錯該責備,然而台灣媒體的態度讓年輕醫生越來越不敢當外科醫生,請不要讓台灣的外科毀於我們這一代.

Excel圖表: 繪製組合圖(Combination Chart)(上)

Combination Chart

最近,我常常使用C#寫程式自動化產生excel圖表,甚至遇到被要求用Excel畫出各式各樣的圖形,因此我也學了滿多有趣的技巧.目前我計畫先更新如何使用excel教學,接下來會進一步寫有關「用程式產生excel圖表」的教程.

很抱歉,有關Excel教程使用軟體介面是英文,一方面是工作需要開發新功能,另一面遇到問題,我能知道英文關鍵字,因此我能準確使用Google搜尋到我要的資料.換句話說,若你想實作將office自動化,我會建議使用英文介面進行開發.

還有,若對教程有任何疑問,請觀看教學影片.最後,測試範本的資料是隨意填,因此資料不具有任何統計意義.

ps.本文章教學有錯字, 按「鑽」數應該為按「讚」數,我已經將GitHub範本修正
2014/8/11 增加文章  Excel圖表: 繪製組合圖(中)

作業環境

  • Windows 7 64bits
  • Microsoft Office 2013 -English

練習範本

教學影片



教程

  1. 首先, 請到載點下載example.xls後,打開此檔案進入Excel畫面
  2.  
    圖一.下載範例Excel


  3. 接下來,如圖二所示,請依照藍色方框圈選你要畫的資料,然後請切換到[INSERT](插入),選擇加入 2-D Column(2-D柱狀圖)中的[Clustered Column].

  4. 圖二.使用Excel畫2-D柱狀圖(2-D Column)


  5. 接著,請切換到[DESIGN](設計)後選擇[Select Data]進入Select Data Source(選擇資料來源)介面,然後選擇[ADD](加入) 加入新數列.
  6.  
    圖三.選擇加入新的參考資料


  7. 再接著,進入Edit Series(編輯數列)介面後,請先依照橘色方框選擇[Series name](數列名稱),然後在依照藍色方框選擇[Series values](數列值),最後按下[OK]鍵.

  8. 圖四.選取要加入的資料


  9. 其次,在Select Data Source(選擇資料來源)介面顯示成功加入按鑽數後,按下[OK]鍵加入此數列.

  10. 圖五.加入參考按讚數的資料


  11. 再其次,請在你的統計圖選擇[] 的按鈕後,點選加入 註解框[Legend].

  12. 圖六.加入圖片的註解框(Legend)


  13. 再次,移動滑鼠到註解框的[按讚數]後按下滑鼠右鍵後,選擇[Change Series Chart Type](更改數列圖表類型)

  14. 圖七.更改圖表類型


  15. 然後,在Change Chart Type(更改圖表類型)視窗介面,請將按鑽數在Chart Type更改為[Line with Markers](直線帶有標記),然後勾選[Secondary Axis](第二座標軸),按下[OK]即可完成設置

  16.  圖八. 設置按讚數為第二個座標軸

  17. 最後,如下圖所示成功繪製組合圖.

  18. 圖九.成功繪製組合圖


Chrome隱私權(續):讓你Chrome預設為隱身模式

最近工作的時候,我經常發現我忘記登出我的gmail信箱,雖然那是公司配給我的電腦,然而此電腦經常不關機,或許哪一天駭客入侵資料就看光光.另一方面,我曾經看過我同事忘記登出電腦,由於我們公司很單純,所以無需在意隱私權問題.可是若你在大公司,我建議你在公司還是要注意隱私權,因為你不知道小人何時會出現,例如:之前HTC鬧得沸沸揚揚的間諜案.總而言之,若你沒打算在目前公司待很久,我建議你在公司還是要好好保護你的隱私資料,而方法很簡單直接將你公司Chrome預設為隱身模式(incognito mode). 隱身模式的好處只要你關掉瀏覽器自動清理你的資料,因此你無需再做登出的動作,而且你的email地址也不會外流!

有關incognito mode,在之前的文章做簡單介紹,有興趣的人可以看看.

設置教程


  1. 首先, 請在Chrome的圖示按下滑鼠右鍵後,請點選[Properties](屬性).
  2.  
    圖一. 進入Chrome的屬性頁面

  3. 然後,如下圖的紅色方框所示,請在Target中chrome.exe後方加入 [--incognito],然後按下[Apply] 改變設置,最後按下[OK]鍵完成設定.

  4. 圖二.Chrome設定隱身模式

  5. 最後,重新開啟Chrome成功進入隱身模式(incognito mode).
  6.  
Reference:
1. Laurence Eckert, How To: Browse In Incognito Mode By Default

胖子工程師辛酸史:事半功倍

上一次開會事件,由於專案經理感覺失了面子,為了讓老闆對他改觀,他在本周提出要將資訊部門的程式碼進行版本控管,目的是為了監視資料可視化的進度,甚至縮短此進度的時程,然而這項的改革使胖子的壓力更大!

雖然胖子上次留了心眼讓老闆同意三個禮拜完成此功能,然而最困擾的是每週的工作會議,第一次工作會議,專案經理竟然開始干涉到工程師寫程式的邏輯,經理常常以自己的邏輯去評論每周有關版本控管,甚至資疑資訊部門的工作效率,這些事情讓胖子心力交瘁.

因此,胖子開始思考如何讓專案經理知難而退,讓自己的專業領域不受侵犯,而今天是第三次工作會議,不但要讓老闆看到資料可視化的Demo,而且胖子留了心眼沒將資料可視化所增加的新功能上傳到Git.

老闆:"胖子,你們資訊部門已增加資料可視化功能嗎?"

胖子開啟投影片後回答:"老闆,這是我們程式摸擬結果!雖然我們成功增加資料可視化功能,然而根據FakeLemon的要求,我們仍然需要修正我們使用者介面."

老闆:"恩,很好!資訊部門能在時間期限內做出來,值得鼓勵!但是,有關使用者介面修正,由於我們有新計畫要接,我希望不要花太多時間在那裏,專案經理有什麼意見嗎?"

專案經理:"老闆,自從我們實施版本控管,我想此功能雛型已完成,因此我認為資訊部門每天只要花1到2小時,大概這周即可交貨!"

胖子(心理OS):"說的簡單,版本控管不等於功能完成好嗎?╯︿╰ 幸好我留了心眼,剛剛沒更新對資料可視化優化和增加新功能!"

老闆:"胖子,資訊部門這周能交貨和接新案子嗎?"

胖子:"老闆,我認為雖然這周交貨沒問題,但是接新案子有點困難,其實我們資訊部門針對資料可視化進行探討,我們認為此功能在將來的新案子應該會用到,因此我們資訊部門也在思考如何進行優化和增加新功能.工程師B,對吧?"

工程師B: "老闆,最近國外的確滿流行探討資料可視化,竟然我們現在正在做此功能,因此我認為我們應該趁這時候將此功能完善"

專案經理□′:"資訊部門不要找理由,我們新案子也很多,哪有時間給你們慢慢研究阿!"

老闆:"恩......雖然我很認同資訊部門的想法,但是我們工作效率確實需要改善!胖子這周你就完善資料可視化功能並交貨,但是你們資訊部門也該檢討如何提升工作效率,知道嗎?"

胖子:"知道了,老闆!"

回到座位的胖子不禁佩服自己是多麼聰明的(^o^) ,他竟然成功跟老闆爭取時間了,其實他不把新功能上傳到Git,他是想把程式做一次整理,並且找出程式的bug.雖然資料可視化功能已經可以交貨,但是他認為資料可視化程式架構不夠好,然而老闆不看內容而是看成果,所以胖子沒有將最新進度報告老闆,以便於跟老闆爭取時間.

作者有話要說:

你曾經覺得拚死拚活把程式趕出來,卻因為程式有bug而被罵很慘嗎?

說實話,我身邊的工程師都沒什麼心眼,或許他們覺得就是只喜歡寫程式,所以不想花心思處理職場人際問題.然而,我認為如果只顧著跟老闆報告你這周做什麼或只顧修專案經理說的bug,你會有做不完的事.

其實程式設計者應該思考你報告對象是誰,如果報告對象只看成果的話,或許你能想想看如何報告和跟團隊談判.就像文中胖子他很清楚他的程式有些地方需要修正,因此他將自己所增加新功能視為談判籌碼來爭取修他程式架構時間和bug. 

換句話說,其實程式設計者也需要給自己時間回顧和檢討程式,畢竟測出bug仍然自己需要修正,所以還不如在還記得程式架構時將它做到更好.我想這才是真正的事半功倍.

Qt物件導向:什麼是類別?

在物件導向設計中,程式設計者通常使用類別去產生物件,因此類別主要描述你要產生的物件.換句話說,我們像畫設計圖似地去設計具有特定功能的類別,然後在程式像變數去初始化具有類別功能的變數,而此變數即稱為物件.然而請注意你可以產生多個物件,但類別只有唯一一個,就像一個設計圖可以產生許多產品.

圖一描述類別的構成,我們通常在資料成員使用定義符private或protected修飾,一方面是不允許類別以外成員函數去更改資料成員值,而且在衍生類別(derived class)可依據衍生類別需求對資料成員做不同的操作,因此成員函數通常使用定義符public修飾.其實這種受限處理資料成員的方法,我們通常可稱作封裝.
    圖一.類別的構成(source: IBM developerWorks)


  1. 類別的基本定義 [1] 
    • 資料成員(data member) 
    • 成員函數(member function) 
      • 通常用來管理或操作資料的成員 
    • 處理的定義符( access specifiers) 
      • public : 
        • 只要宣告物件,即可以直接存取資料成員 
      • private: 
        • 只有類別的成員函數可以處理類別內的資料的成員. 
        • 衍生類別的成員函數也無權存取類別成員
      • protected: 
        • 無論基底類別或衍生類別,類別的成員函數都可以存取類別成員
Reference:
  1. Alan Ezust, Paul Ezust, An Introduction to Design Patterns in C++ with Qt 4, Chapter 2
  2. UML basics: The class diagram, IBM developerWorks 
  3. [online]:http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/

快樂的方法(1):你想要快樂? 開始感激吧!

圖一.微笑的裝置藝術(source: postitwar.com)

我曾經有一段時間感到不快樂,甚至跟大多數人一樣自稱台灣是鬼島,使自己的朋友避之惟恐不及.說實話,一般人都不喜歡隨時會爆發的火藥庫,因為你的情緒會影響到他,他也已經夠累還要聽你抱怨,所以若要人親切或關心你,快樂是非常重要的第一步.而在Ted有一段精彩演講為"你想要快樂? 開始感激吧!", 講者David Steindl-Rast用淺顯易懂方式告訴你如何獲得快樂.

首先,你覺得快樂的人真的會由衷感激嗎?例如媒體報導某些偉大大老闆們,他們都過得很快樂,然而你覺得他們真的感激台灣員工的犧牲與奉獻嗎?說實話,我只看到台灣員工經常過勞死的新聞,卻沒看到這些公司真心感激員工的付出.因此,若你想要追尋快樂,千萬不能把這些大老闆當作追求目標,因為他們是靠踩著別人的屍體才能成功!

然而,諷刺的是現代人經常追求快樂,然而我卻經常從那些不幸的人身上看到快樂!有一天,我正在等客運去台北,後來有很可愛的身心障礙的朋友跟我兜售,我就只花了50元買了一包魷魚絲後,想不到他給我像向日葵般的燦爛微笑跟我說謝謝.那時我想為何區區50元能讓他那麼快樂,而我為什麼比他還不快樂呢?

其實,那些不幸的人比我們容易滿足,所以他們也經常感激身邊小事.因此,從他們身上,你會發現不是快樂就會讓你感激,而是感激才會快樂.就像我上一篇的感謝公車司機,請放下你的智慧手機,多多觀察你身邊事物,我相信你能找到讓你值得感激的地方.

說實話,台灣的新聞讓你變成只會批評的人,而這些話語只會傷到那些默默努力的人,其實造成不公平是這些人嗎?我想不是,而是政治,媒體與財團吧!連李安都說:"台灣人好,但政治、媒體不太好!"

最後,希望媒體好好去找出台灣美好的一面,不要整天報導負面新聞,當正義魔人去看別人隱私,甚至整天強調豪宅的美好(炫富),你們這樣的行為只會讓台灣人越來越不快樂.雖然我身邊的人不看台灣新聞,但我想台灣社會事件如此頻繁,我想媒體應該功不可沒!

壓抑的台灣:別忘記感謝公車司機

圖一.英國公車

有一天,我默默坐上擁擠的公車,然而當到達某一站時,司機為了讓人都能上車,因此他大叫著請乘客往後退,或許台灣人生活繁忙,幾乎沒有乘客理會司機的要求,因此司機的情緒受到影響,

此時,有一個老人家大叫要下車,司機就開了車門,然而老人家卻搞錯下車站嚷嚷的說下一站,車上充滿著雜音,而司機像是不知怎麼辦似看著後門螢幕發呆,最後老人家只好下車了!

可是,對司機的考驗並未結束,車上的乘客大罵司機欺負老人家,司機不理會惡言惡語,他默默地想把乘客一一送到家,然而不知哪個乘客每一站都按著下車鈴,我想司機或許意識到剛剛的錯,因此他每一站平靜看著後門螢幕有沒有要下車的人.

最後,我默默下了車.....

我不禁回想起在英國坐公車時,我不但一次就要花100元台幣坐公車才能到我學校,而且公車所經過道路沒有人亂停在馬路邊,而且英國司機與乘客之間不但有塑膠看板,甚至有很舒服的駕駛空間.其次,英國公車有一個很貼心設計,就是讓乘客在前面下車,因此英國人經過司機旁邊都會說聲謝謝.這些福利,讓我都不禁佩服國外制度的健全,我想英國真的是認真思考如何讓司機與乘客都有愉快的一天! 

比起英國司機,我不禁佩服台灣公車司機駕車技術,司機必須從那麼亂的街道一一把乘客送回家,而且我還只花區區15元台幣.甚至,擁擠空間使得乘客扶著他的椅背干擾他的開車,甚至要聞著乘客身上傳來刺鼻的味道~

我不禁感謝台灣司機的犧牲,讓我能平安到家.謝謝他們的付出!

其實,我寫這故事的目的並不是要批評任何事物,而是希望大家不要只記得台灣壞的一面,批評與抱怨並不會讓台灣更好,而且這些言語只會傷到這些默默付出的人.因為,在台灣的每個人都很辛苦,而人是需要肯定與讚美,其實隨意給這些人一個笑容或謝謝,我想能給他們忙碌一天一絲溫暖.

批評與抱怨只會造成衝突的台灣社會,自我反省與感激才能讓台灣更美好


最後,我想跟那位司機說聲抱歉,袖手旁觀的我實在該好好反省,再一次感謝台灣所有公車司機的辛苦與辛勞.

胖子工程師辛酸史:獨木不成林

上次胖子給團隊寄那封信,雖然老闆並沒有追究此錯誤,然而對於胖子而言,這是他第一次試著總結自己的工作寄信給老闆,而且希望這封信讓老闆有機會了解他,畢竟專案經理的資歷比胖子長,所以胖子認為不應該與專案經理硬碰硬.

今天到了公司的例行會議,結果突然告知老闆也要參加,而胖子突然想起計畫案的事,他感到有點緊張,因為他認為他的計畫案還達不到老闆的要求,因此他忐忑不安地參加會議.

老闆:"最近我看了一下你們所修程式bugs,然而FakeLemon公司希望增加資料可視化功能,若要增加此功能需要花多久時間?"

專案經理:"老闆,我想資訊部門應該兩個禮拜就完成,而且之前我們有寫類似功能,我一定親自監督是否完成."

胖子(心理OS):"囧rz...說得簡單,那個功能是套用JavaScript,而現在老闆是要用C++實作資料可視化,這根本沒那麼簡單吧!"

老闆:"恩,很好!資訊部門兩個禮拜後增加此功能沒問題吧!"

工程師B:"老闆,兩個禮拜可能有點困難,我們手中還要規劃FakeLemon的計劃案,而且我認為還要經過測試一下比較好,畢竟若出現上次那種基本錯誤,我想會有損我們公司形象!胖子,你覺得呢?"

胖子(心理OS):想不到我最大的對手會給我表現機會(^o^)!這次我不會放過在老闆表現的機會,XD  

胖子:"老闆,我也覺得這個時間太趕!這次出貨前,我想保險一點資訊部門還是要親自測試比較好. 而且FakeLemon是我們的大客戶,還有我認為應該要問清楚他們公司所要的呈現方式,其實之前FakeLemon跟我反應以後有關使用者介面能是否能跟他們先討論,因此我覺得多兩三個禮拜時間比較保險."

專案經理:"胖子,資訊部門一個月也太久,這不是讓FakeLemon覺得我們沒效率"

工程師B: "經理,還不是你們部門再匯入資料不好好確認,資訊部門才需要加長所花費時間!"

老闆:"恩,雖然你們這樣客戶著想很不錯,但是專案經理考慮也對,資訊部門能不能再縮短你們的時間"

胖子(心理OS):"‧★,:*:\()/:*°*~~我是多麼聰明的胖子~!我早到預想到專案經理會講這些話,因此我故意說久一點

胖子: "是,老闆.要不然我們盡量在三個禮拜先做出來給大家看,可以請老闆到時確認是否要交貨給FakeLemon. "

工程師B: "恩,老闆我也沒問題."

老闆:"恩,那就這樣!那胖子由你主動接洽FakeLemon問清楚他們所要的,還有請專案經理好好監督,我希望不要再有信件上的錯誤了!胖子只要問有關資料可視化相關事項,計劃案的事在我還沒看過之前,請不要洩漏任何消息"

結束會議回到座位的胖子想到剛才會議內容,他真的覺得好險工程師B有提出時間太趕問題,要不然到時候出問題,他想他又要遭殃了!然而胖子自嗨想自己是多麼有魅力,想不到連競爭對手都幫他,胖子不禁佩服自己好人緣>﹏< 

因此胖子看著工程師B背影,想著"雖然你今天與我合作度過這次危機,但是你永遠是我可敬的對手XD"

而工程師B仍然無視胖子熱情眼光,繼續他的工作.....


作者有話要說:

你想過你的某些作為拖累你同事嗎?

我常常因為自我感覺良好沒跟上司討論,就在工作會議中提出增加新功能,讓我的上司疲於奔命.說實話,雖然老闆和團隊很喜歡這樣員工,然而後來想一想我何嘗不是拖我上司的後腿.最羞愧的是當我遭遇困難時,只有我的上司不計較我以前魯莽主動幫我解決程式問題,然而專案經理卻在開會當場指責我,甚至塞工作給我,直到那時我才知道上司才是真正關心我的人,而有些人只口頭關心你,然而私下只是將你當好用和使喚的工具罷了.

後來,我開會前會找我上司討論一下或主動告知我做什麼,因此上司不再因為我不知分寸讓他沒面子,而且他也會主動調整我的工作量.其實,人都需要互相幫忙的,然而找對人合作度過難關就是最困難的課題,因此建議大家不妨多多觀察你同事,或許能改善你的工作環境呢!就像我自從與我上司合作後,我盡量開會適度附和上司,不但讓我工作效率更好,而且老闆對我印象更好了,因為之前的我很不合群.

最後希望藉由這個小故事能讓瞭解合作的重要性,其實當老闆提出困難要求,不妨試著跟同事合作在會議一起提出困難點,畢竟兩人比起一人說服老闆更容易些.

Qt函數: QComboBox使用技巧

這次例子依據Qt入門篇(3):連結SQLITE資料庫進行範例說明.由於主要對QComboBox的函數進行功能說明,因此這次就不上傳程式碼的GitHub,有興趣的人可以下載Qt Sqlite的範例後,進行以下的練習.
  1. 讓QComboBox增加提示訊息(Placeholder text)?

  2. 圖一. 增加提示訊息

    如圖一所示,有一次我需要在QComboBox增加提示訊息,即告知使用者此下拉式選單主要增加什麼內容,那時我先用以下的程式碼的解決,然而它有很大缺點就是讓使用者可任意添加QComboBox的內容,然而圖一的例子其實不需要使用者增加新縣市,因此若要使用者選擇你指定的內容,我不建議使用此方法.
    QLineEdit *placeholder=new QLineEdit;
    placeholder->setPlaceholderText(QStringLiteral("請選擇縣市"));
    ui->comboBox->setLineEdit(placeholder);
    

  3. 使用者在QComboBox輸入內容,列出可能的選項?

  4. 圖二. 列出可選的項目

    若要提示使用者知道可選的項目,你可以使用以下的程式碼.雖然它提供使用者類似搜尋功能,但是由於QComboBox可編輯,因此與1有相同的問題.
    QCompleter *com=new QCompleter(cityname);
    com->setCaseSensitivity(Qt::CaseSensitive);
    ui->comboBox->setEditable(true);
    ui->comboBox->setCompleter(com);
    

延伸閱讀:
1. Qt入門篇(3):連結SQLITE資料

http://chenglearning.blogspot.tw/2013/11/qt3sqlite.html