WHAT'S NEW?
Loading...

Qt5和Qt4版本相容性

你曾經下載以前Qt4的範例,然而用Qt5卻編譯失敗嗎?


Qt5將功能清楚地分割和簡化,然而造成新舊版本不相容問題, 例如Qt5無法成功編譯Qt的Google Map. 還有,你也可能遇到所使用此開源程式碼只支持Qt4,例如開源地圖軟件QGIS.然而,工程師難免遇到程式碼更新或維護舊版的軟體,所以每次Release軟體時都手動修改程式碼後建置嗎?這樣操作不但無形中浪費時間,而且也限制你的程式擴展性.

下表,我整理出這兩個版本相關類別差異,我們主要根據Qt版本修正標頭和專案檔,而Qt的版本檢查主要有以下幾種:

  1. 專案檔,參數QT_MAJOR_VERSION檢查Qt主要版本號:
    • 若Qt的版本大於4,需要引用那些模組:
    • greaterThan(QT_MAJOR_VERSION, 4):
      

    • 若Qt的版本小於5,需要引用那些模組:
    • lessThan(QT_MAJOR_VERSION,5):
      

  2. 標頭,加入標頭QtGlobal利用巨集QT_VERSION得到Qt版本
  3. #include <QtGlobal>
    #if QT_VERSION >= 0x050000
    //版本大等於5需加入那些標頭
    #else
    //版本小於5需加入那些標頭
    #endif
    

版本對照表

類別
描述
Qt4
Qt5
QApplication
管理GUI應用程式控制流向和主要設置
標頭(Header)
#include<QtGui/QApplication>
#include <QApplication>
專案檔(.pro)
QT += gui
QT += widgets
QWebFrame
在網頁呈現Frame
標頭(Header)
#include <QWebFrame>
專案檔(.pro)
QT += gui
QT += webkitwidgets
QtMultimedia
在QML上操控多媒體內容
標頭(Header)
#include <QtMultimedia>
專案檔(.pro)
QT += multimedia
CONFIG += mobility
MOBILITY += multimedia
QT += multimedia

編譯環境

  • Windows 7 64bit
  • Qt 5.3.1(MinGW 4.8 32 bit)
    • 建議:Qt 4.0以上的版本: 編譯器MINGW

下載

  • GitHub
    • 這是已經修改好的範例,僅供參考

教程

  1. 首先, 為了連結到在Qt5版本到所獨立出來的模組,請在.pro的加入以下的程式碼.

  2. greaterThan(QT_MAJOR_VERSION, 4): QT+=widgets webkitwidgets
    

    圖一. 修改專案黨


  3. 接著,若要加入類別QApplication,請先加入QtGloabl然後根據巨集QT_VERSION的Qt版本加入正確標頭.

  4. #include <QtGlobal>
    #if QT_VERSION >= 0x050000
    #include <QApplication>
    #else
    #include <QtGui/QApplication>
    

    延伸閱讀

    [1] Qt 4.8: API Document
        http://qt-project.org/doc/qt-4.8/classes.html
    [2] Qt 5.3: API Document
        http://qt-project.org/doc/qt-5/classes.html

    Qt與Google Map:編譯QJson

    上一篇教你如何使用Git Bash下載Qt的Google Map的範例,由於此範例利用JSON 存取位置資訊,因此還需要編譯第三方函式庫QJson,所以未編譯QJson之前是無法執行此範例.

    Json是一種輕量型資料交換格式,它可以記錄整數,實數,字串,依順序排列的數值和一系列成對數字和名字.QJson是將JSON 的資料轉換成Qt的資料型態QVarient,也就是說利用此函式庫很輕易使用Qt管理JSON 資料.

    QJson官方介紹有兩種方法可以編譯此函式庫,而本篇將只說明如何利用CLI Way編譯此範例,若有教程有任何不清楚的地方,請參考教學影片.
    1. CLI Way
    2. GUI Way
    順帶一提,請不要使用GitHub網頁按下『Download ZIP』下載QJSON,否則無法編譯成功.請使用上一篇Git Bash下載此函式庫.

    編譯環境

    • Windows 7 64bit
    • Qt 5.3.1(MinGW 4.8 32 bit)
      • 建議:Qt 4.0以上的版本: 編譯器MINGW
    • QJSON GitHub Page
      • https://github.com/flavio/qjson
    • CMake 3.0.2以上

    教學影片


    TokyoLoader:下載優酷、土豆等大陸影音網站

    你知道大陸影音網站有分段下載限制嗎?

    圖一.Freemake無法完整下載優酷影片


    之前在Freemake下載線上影片證明他能完整下載Youtube影片,然而在大陸影音網站卻完全行不通.如上圖所示,你按下『Paste URL』按鈕加入大約有23分鐘優酷影片,但它只下載六分鐘,甚至你需要繼續播放一段時間才能下載影片,這是Freemake程式bug嗎?  不是,而是大陸影音網站將影片分段防止他人下載.

    目前,中文解決方案是安裝此影音網站的下載器和安裝碩鼠,但是大陸軟體一般有安全性風險,而且無法從瀏覽器直接下載.所以沒有其他替代方案嗎?有,日本人開發一套下載軟體TokyoLoader,雖然目前只有日本語系,然而它在Chrome瀏覽各大陸網站時,很貼心在畫面右側增加下載按鈕選項,如下圖二所示.換句話說,當你觀看影片時,你無須切換畫面只需要按下TokyoLoader圖示,即可下載影片.


    最後,由於有版權影片擋台灣IP,若要下載影片請安裝Unblock Youku,我就將不在贅述.

    圖二.TokyoLoader下載圖示位址

    作業環境

    • Windows 7 64bits
    • TokyoLoader-目前只支援日文版
    • (optional) 安裝Chrome附加元件-Unblock Youku

    教學影片



    Excel圖表: 繪製組合圖(下)

    圖一.設定軸的標籤樣式



    前一篇主要教你利用反轉垂直座標軸加大直方圖和趨勢圖間距,而裡面範例我以反轉瀏覽數Y軸為例,然而與圖一有所不同,在進入接下來教學前,請練習產生反轉第二座標Y軸(按讚數).如圖一所示,這次主題主要教你如何更改軸的標籤樣式,但加入新數值格式時請記得結尾必須要有冒號(;),如下圖二所示.否則會出現不預期的結果, 這裡範例未加大於50%的數字都會顯示.

    圖二.自訂數值格式規則


    作業環境

    • Windows 7 64bits
    • Microsoft Office 2013-中文

    練習範本

    教程

    1. 首先,請如下圖二選取按讚數Y軸後,在坐標軸格式的數列圖示下,展開『數值』標籤後在格式代碼下輸入以下文字後,按下『新增』.
    2.  [紅色][<0.6]0%;
      圖三.更改按讚數數值格式


    3. 接下來,請重複1的步驟輸入以下代碼更改瀏覽數的Y軸標籤樣式.
    4. [藍色][<5000]0;
      圖四.更改瀏覽數的Y軸


    5. 接著,如下圖在月份左邊增加季節欄位
    6.  
      圖五.新增季節欄位


    7. 其次,如下圖選擇X軸按下滑鼠右鍵後,選擇『選取資料 』.

    8. 圖六.切換到選取資料


    9. 再其次,在選取資料來源視窗的『水平(標籤)座標軸的標籤』下,按下『編輯』按鈕.

    10. 圖六.更改X軸資料來源


    11. 然後,在座標軸標籤視窗,如下圖的滑鼠游標按下按鈕重選座標軸範圍.

    12. 圖七.更改坐標軸的範圍


    13. 再然後,請依下圖圈選A2到B13, 再依據滑鼠游標確定更改

    14. 圖七.更改坐標軸的範圍






    15. 最後,依順序按下圖七和圖六確定按鈕,即成功更改X軸的標籤樣式.

    16. 圖八.有季節說明的X軸


    作者小劇場:

    (答案一律反白)

    胖子(^o^) :為了慶祝一百篇,大大要去構思故事架構!哈~哈~這裡是我的天下

    大笑中的胖子突然感到一陣冷意,轉頭一看不知什麼時候工程師B已站在他身後,胖子顫抖舉起食指說:為何你會在這裡?這種難得出場的機會,不是帥帥的我才有特例嗎?

    工程師B坐下不知拿來的椅子後,拿起書邊看邊說:作者叫你趕快把該做的事做完~趕快講解! 

    胖子 o  ):那你在旁邊要做什麼?

    工程師B低著頭說:確認你有沒有把事情做完......

    胖子自嗨心想原來大大那麼貼心,給他機會向工程師B展現自己厲害,他不禁心中大笑三聲

    (作者: = =....)

    胖子燃起鬥志教了起來:各位大大,『數值』和『格式代碼』分別對應到『Number』和『Format Code』,請思考一下程式是如何表示?


    胖子:你猜對嗎?答案是『NumberFormat』.然而,請注意更改此屬性無法在Excel.Axis找到,你必須先找到TickLabels然後才能更改數值格式.


    胖子:接下來,參考下面的程式碼更改個別數列的X軸範圍,而不是用FullSeriesCollection一次更改全部數列的範圍.
    Excel.Series series = seriesCollection.NewSeries();
    series.XValues = oSheet.get_Range("A2", "B13");
    series.Values = oSheet.get_Range("C2", "C13");

    胖子:謝謝觀看今天的教學.有關更多Excel的C#軸相關應用,請參考以下連結
    http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.axes.aspx
    結束中胖子回頭說:工程師B,我實在太帥是不是?~哈

    然而胖子身後已經空無一人............

    Skype去廣告:利用限制網站

    你曾經使用Skype聊天時,出現令人尷尬的廣告嗎?

    如下圖一所示,在Skype聊天對話框上面出現廣告,然而有時會出現尷尬的文字,其實這裡我們可以使用在KMPlayer去廣告提到的方法來擋掉桌面應用程式所出現的廣告,然而最大問題此廣告的網域是什麼.換句話說,當你知道網域時,你可以利用增加限制網站來擋掉你不想要的廣告.以下網址就是Skype的廣告來源:
      https://apps.skype.com/
      圖一.Skype廣告畫面

    作業環境

    • Windows 7 64bits
    • Skype 6.18.0.106

      教程

      1. 首先, 請在開始功能表開啟控制台後,請進入『網路和網際網路』再按下『網際網路選項』.

      2. 圖二.開啟網際網路選項


      3. 接著,在網際網路-內容視窗切換『安全性』,然後選擇『限制的網站』在按下『網站』.

      4. 圖三.進入『限制的網站』選項


      5. 再接著,在限制網站視窗,輸入『https://apps.skype.com/』後按下新增,然後按下『關閉』→『確定』完成設置.

      6. 圖四.增加限制Skype的網站

      7. 最後,請重新開啟你的Skype,確認是否成功去除廣告.

      8. 圖五.無廣告的Skype

      Excel圖表: 繪製組合圖(中)


      圖一.繪製進階的組合圖(Combination Chart)


      在前一篇,我講述有關如何使用Excel2013繪製組合圖,接下來這裡將先介紹移動圖表、縮短直方圖間距,反轉直方圖的坐標軸,修正圖表樣式等技巧.另一方面,我也提供練習題,若不知道答案,請參考教學影片.在教學影片提供自訂坐標軸標籤格式,此功能將在下一篇補充說明.

      最後,我在文章最後增加英文小劇場和C#自動化技巧,若你不喜歡就請跳過這段.其實,我加入這段原因,希望幫助學習如何將excel自動化,畢竟程式語言都跟英文息息相關.

      作業環境

      • Windows 7 64bits
      • Microsoft Office 2013-中文

      練習範本

      教學影片



      ps.本文章教學影片有錯字, 按「鑽」數應該為按「讚」數,我已經將GitHub範本修正

      UML:介紹

      你有想過為何要學習統一建模語言(Unified Modeling Language, UML)嗎?


      圖一.軟體開發流程(The Journal of Object Technology)


      這幾年來,越來越多公司要求面試者擁有此技術,漸漸在履歷上具有加分作用.然而,有部分工程師對此技術感到存疑,他不但因複雜性花費過多時間,而且不容易與軟體專案同步.然而,工程師若以自己觀點進行軟體開發,甚至未定義目標市場,造成軟體不被市場接受,因此某些專家定義如圖一軟體開發流程.事實上,UML幫助團隊建立軟體開發過程(Software development process),並且加入商業考量因子,使公司產品符合市場需求.


      統一建模語言(Unified Modeling Language, UML)主要用來可視化(Visulaize)系統架構設計,而且使用圖形符號描述系統元件之間互動與關係.另一方面,劃出軟體系統架構並不是第一優先,而是先進行需求分析(requirement analysis)和商業定義(Businese definition),這定義使用者案例(Use Case),圖形使用者界面的藍圖和流程,以問題導向物件類別圖(class diagram).換句話說,它在專案經理,市場經理和工程師之間建立溝通橋樑,不但讓團隊清楚了解初步系統藍圖與行為,而且降低溝通不良問題.

      最重要的是,在進行需求分析與商業定義時,不要寫任何程式碼!我想大部分工程師不是遇到一句話就打掉重練,就是根本不需要此功能,導致工程師浪費許多時間,甚至工時越來越長.因此,公司若想給工程師良好的工作環境,你應該好好清楚定義產品走向,而不是有一個想法直接叫工程師加功能,這樣並不會使產品賣得好.換句話說,發展產品時不應該把功能把第一,而是要同時考慮功能性與市場接受度.這樣不但能增加公司營收,而且使台灣工程師辛苦有價值,拿到優渥的分紅.


      UML取代傳統系統文件,不僅代表軟體系統架構圖與流程,而且準確定義各元件的行為和邏輯,甚至有效率地維護軟體系統.最重要的是,未來加入團隊夥伴能閱讀此份文件很快進入狀況,而且也節省你說明的時間.另一方面,當你遇到bug時,你不必複習你的系統架構,甚至一步一步偵錯你的程式碼,也就說減少處理bug時間.


      順帶一提,UML使用到物件導向設計相關觀念,建議複習物件導向.

      總結

      分類

      • Structural Diagrams
        • Class diagram
        • Object diagram
        • Component diagram
        • Deployment diagram
      • Behaviour Diagrams
        • Use Case diagram
        • Sequence diagram
        • Collaboration diagram
        • Statechart diagram
        • Activity diagram

      優點

      1. 更有效率與他人溝通你所做的
      2. 降低系統維護花費的錢
      3. 節省追bug時間,無須重複複習你程式架構
      4. 清楚定義你軟體行為
      5. 幫助未來加入團隊夥伴進入狀況,減少說明時間

      缺點

      1. 它需要即時與你程式碼同步更新
      2. 初學者很難去定義或畫出正確的流程
      3. 初學者經常劃出過於複雜和多餘的圖

      筆電經常沒電嗎? 關掉Chrome!

      圖二.關掉Chrome背景執行

      最近,『富比士(forbes.com)』作者Lan Morris在Windows筆電上開啟Chrome會加速筆電電池消耗率,甚至降低降低電腦效能.換句話說,在筆電使用Chrome不但很耗電,甚至無形中增加你的電費.事實上,有人在2010年向Google回報此問題,直到最近Google才承諾近期內會修正此Bug.因此,在修正之前,我建議用以下的方法防止Chrome繼續傷害電池性能.

      在這幾年,你曾經覺得筆電續航力不如預期?一年不如一年?Morris指出即使開著Chorme未做任何事,Chrome仍設定系統時脈頻率(system clock tick rate)1毫秒,它並不像其他瀏覽器會回到預設值 15.625毫秒.系統時脈頻率代表事件在固定的時間間隔被執行,值越低代表在每秒被執行次數越高,例如:1毫秒代表執行1000次.換句話說,直到關閉它,Chorme 不會未回到空閒狀態,因此當你未使用Chrome時請記得關閉他

      接下來,請記得關掉Chrome背景執行選項.首先,請到Chrome的設定頁面並按下顯示進階設定後,捲動到系統標籤後取消勾選Google Chrome 關閉時繼續執行背景應用程式』.藉由這樣設置,我們才能確定Chrome沒有繼續耗電和占用記憶體.其實,這功能是否運作是依據你擴充元件和應用程式,有些將會要求Chrome繼續在背景執行,例如信件通知.換言之,若你想要完全關掉Chrome,請不要勾此選項.


      最後,Chrome耗電問題只出現在Windows平台?很不幸的是,Mac使用者也有相同問題.然而,耗電的原因有所不同,Windows主要是Chrome處理器idle設置不當.當你外出使用筆電而且沒有插座時,你需要非常注意使用Chrome,要不然換別的瀏覽器IE或Firefox.

      作者小劇場:


      胖子:最近都沒有我出場畫面,難道作者看我太帥忌妒我,不給我出場機會.

      作者在電腦前面趕文章中:  = =  恩.....

      胖子在心中大笑想著連作者都站在我這邊,果然贏工程師B指日可待(^o^)

      胖子湊到作者旁邊說:那大大什麼時候......唉阿~~作者大大,Battery life在這裡指不是『電池壽命』而是『電池可用時間』吧!我覺得讀者會誤解耶!

      作者(¬_¬)看著胖子:是嗎?我用Google翻譯出來是『電池壽命』.

      胖子邊想終於到我發揮的時候(^o^) 邊說:大大,根據Longman Dictionary的定義,『Battery life』解釋成電池能產生多久電力,


      圖二. Battery Life的定義

      作者點著頭:原來如此,想不到你英文這麼好

      胖子:電池壽命在英文可以用『Battery longevity』.大大什麼時候讓帥帥我出場?

      作者鄙視看著胖子:我今天不是讓你出場展現你的能力,這是多麼偉大任務.

      胖子( ⊙ o ⊙ ):.........

      事實上,為了不讓讀者混淆文章的意思,我也是看了好幾篇文章做了這樣修正!然而,不可諱言電池放電速度太快會影響到電池壽命.


      UML:相關工具

      哪一種工具最適合畫UML圖?


      目前主要有以下UML工具
      Visual Paradigm有提供Community提供非商業使用,但是目前最普遍的工具是Visio,然而在Office 2013將UML概念移除, 讓這套軟體成為單純畫圖的軟體,因此若你使用Visio畫UML,請使用2010版本。若你是初學者,免費StarUML即使你不懂物件導向也能輕鬆學好,並且打好基礎。

      以下表格總結UML工具的優缺點:

      工具VisioStarUML 5.0PlantUML
      收費新版開始收費免費
      難易度
      排版自動
      版本相容性最佳最佳
      整合


      對於初學者而言,StarUML比起Visio不需要先惡補UML的基礎知識,而且防止使用者發生錯的離譜狀況,尤其在描述類別圖的關係時。例如:畫類別繼承關係線,它必須明確地指向從A類別到B類別,Visio卻沒有任何限制。換句話說,若你不太懂物件導向和UMLStarUML會是比較好的選擇。

      Visio的優點則是在使用者操作上,讓他們輕易排版和美化UML圖在專案剛開始進行時,StarUML能幫你設計軟體流程與架構,然而當架構越來越龐大時,它在操作上就有很大的缺點,例如:不能滾動滑鼠將圖片放大或縮小,無法在畫布複製到另一個檔案,點選匯入選項合併圖時會出現多餘的東西。換句話說,StarUML很適合在小型專案和範例,然而在大型專案就會出現整合和維護問題。


      最近,StarUML在使用者介面上有最大更新,然而已朝向開始收費階段.若你是剛開始的初學者,舊版就能滿足你的需求以專業性而言,Visual Paradigm商業版提供更完整軟體開發流程,例如:UML類別圖直接相對應C++程式碼。Visual Paradigm結合Visio和StarUML的優點,但是目前我仍然UML的初學者,將來等我更了解專業工具好處在與你們分享,因此接下來的UML教學都會以StarUML為主。


      快樂的方法(5): 請傾聽關注身邊的人



      最近台灣發生令人悲痛捷運喋血事件,而兇手鄭捷那張對世界絕望的表情,讓我無法忘懷,鄭捷的行為無庸置疑是錯的,但我想問台灣有好好重視品德教育嗎?我曾經就讀當地明星學校,那時公民道德課學生不是在睡覺,要不然就拿來考試,這樣教育方式能讓下一代不要模仿電影或遊戲情景嗎?另一方面,台灣這種考試至上的教育方式,不但壓力很大而且喘不過氣,又加上媒體告訴這些年輕人那麼辛苦念書出來只有22K,他們為了什麼才那麼努力?以前認識鄭捷的老闆娘就透漏他感到壓力很大,甚至到不想活和幻想規劃殺人,這些徵狀顯示他多麼想擺脫讓他喘不過氣的一切.

      我曾經也被旁邊人當成怪胎,而且在團體活動被邊緣化,那時候經常感到孤獨,沒有人願意瞭解我這個人,或許那時我沒有被暴力遊戲所影響和社群網站並不存在,但是我擁有很好的媽媽和姐姐,即使我沒勇氣自殺也沒放下錯事!後來,在英國求學和這幾年職場經驗,雖然那段時間是我人生最低潮的時期,但是讓我不但心靈有成長,而且更清楚維持人與人之間關係.根據我的觀察,千萬不要認為只有自己挣扎與痛苦活在這不公平世界,而是大部分人都跟自己一樣很辛苦活著,並且積極尋找人生的意義!若你身邊有表現異常的人,我建議有以下三個方法幫助這些人:

      首先,不要忽略身邊的人發出的求救訊號和異常行為.你認為東海大學收到警告匿名電話,還有跟好朋友講述殺人計畫,是不是鄭捷求救訊號?然而,東海大學第一時間派教官質問鄭捷的行為,你認為有人聽到質問第一時間就會說實話?請看以下在Just Listen外國作者Mark Goulston[1]描述兩個談判專家與拿著槍要自殺的法蘭克的例子,
      談判專家A跟法蘭克說:『我將與你談話,我想除了傷害你自己還有其他方法,我了解你沒有其他選擇,但你其實有.』
      法蘭克回復:『你根本不了解,你就像其他人一樣,讓我獨自一個人!』
      談判專家A繼續說:『我認為我不能這麼做,你現在在購物中心停車場中間,而且拿著槍指著自己的喉嚨.我需要幫助你找到解決方法』
      法蘭克回復: 『E04,我不需要任何幫助』
      經過一小時談判不但毫無進展,而且沉默時間越來越長.但是根據談判情況在場的人知道法蘭克並不是很邪惡的人,他只是很焦慮和生氣不滿的人.警方認為必需把法蘭克帶出來否則無辜的人會受到波及,然而沒有人保證能平安不傷及任何情況下逮到法蘭克.情況很不樂觀.
      一小時半後另一個談判專家B來到現場,他第一時間先了解法蘭克的背景和情況,並且了解目前談判進度與狀況後,他跟談判專家A說:『我想要你這樣跟這個人說:"我賭你覺得沒有人了解你為了出路所做的任何一切,卻無法擺脫這個泥沼,這是真的嗎?" 』
      談胖專家A回覆說: 『說什麼?』
      談胖專家B重複他的建議:『是的,請繼續跟這個人說:"我賭你覺得沒有人了解你為了出路所做的任何一切,卻無法擺脫這個泥沼,這是真的嗎?" 』
      談胖專家A執行並跟法蘭克說,法蘭克也回復: 『說什麼?』
      談判專家A繼續問同樣問題,這次法蘭克回答: 『是的,你說的對!沒有人了解我,而且沒有人給我...E04.』
      談判專家B告訴A說: 『很好,你得到"是",你現在在那個人心中,讓我們在這基礎上繼續.』 B給了A另一個問題:『我打賭你覺得沒有人知道開始每一天都有很多機會,但是卻壞事多於好事,這是真的嗎?』
      法蘭克回答: 『是的,每天都是該死的一天.同樣事一再發生.』
      談判專家B告訴A重複他聽到和得到另一個確認,A繼續問法蘭克:『就是因為沒有人了解和在乎你過得如此糟,而且每天沒有好事只有壞事,所以你在車中拿著搶想結束這一切,是嗎?』
      『是的.』法蘭克回復,然而他的聲音顯示他慢慢平靜下來
      『請告訴我多一點,在你身上究竟發生什麼事?上一次你最好情況是什麼時候?自從發生什麼事讓你變糟?』談判專家A邀請
      法蘭克述說自從他失去工作後所經歷事情,當法蘭克停止時,談判專家A說:『真的嗎?再告訴我一點吧!』
      法蘭克繼續講述他所經歷的問題,談判專家A根據B問:『這些你所遭遇是讓你生氣?沮喪?失望?沒有希望?還是其他才是你所想?』想要法蘭克選擇一個最好文字描述他所感覺,
      法蘭克說:『受夠了!』
      談判專家A繼續說:『所以你無法忍受和當得到限制令時,這就是轉折點嗎?』
      『是的!』法蘭克的聲音和敵意漸漸平靜下來

      看到這裡,你覺得能短短時間就讓鄭捷卸下心防跟教官們談心嗎?作者說這段談判超過四小時,一開始法蘭克失去冷靜像不定時炸彈,談判專家A花了一小時半法蘭克拒絕與他談話,直到談判專家B了解法蘭克這個人然後提出會讓他思考問題,才讓法蘭克願意與人深談.還有,請注意這兩個專家並沒有只專注法蘭克拿槍這件事,甚至指責他的行為,他們都試著了解法蘭克這個人.換句話說,我希望大家遇到身邊人有異常時,不妨請站在他的立場想一想,並且用引導方式了解他所遭遇的問題,甚至給他一個擁抱讓他知道你在關心他.

      接下來,當他遭遇困難和沮喪,不要吝於讚美和給他一個微笑,而父母請給孩子喘口氣的時間.在求學期間,我曾經從早上九點到晚上十點不是在補習班就是學校,那時候我希望父母給我讚美,然而我不但無法得到,而且一次又一次考試不斷給我壓力,那時候使我人際關係降到谷底,這像是一場無止盡的競賽喘不過氣.說實話,我希望台灣父母要改觀,成績好並不代表在職場上有很好表現,能力好卻不會講話在職場上會吃很大悶虧.因此,當你小孩喘不過氣,不妨暑假讓小孩不要參加暑期輔導,親自陪伴著小孩帶他出去玩當作獎勵.若沒有時間,請花一些時間找夏令營課程,甚至有錢讓小孩出國輕鬆念語言學校,不但讓小孩身心放鬆一下,而且多看看這個世界減少負面想法.最重要的是,當小孩成績不好,甚至被二一退學,請坐下來好好跟孩子談,並且讓孩子不要那麼自責,給他一個擁抱和微笑,告訴他們即使失敗你仍然愛著他們.

      最後,當身邊的人沉迷於網路遊戲和社群,請主動邀請他參加活動,並且鼓勵他出去走走認識新朋友有些父母覺得小孩很宅沉迷電腦遊戲很正常,我感到有些無言.事實上,社群網路發達,反而容易小孩子情緒難以管控,尤其FaceBook易引起人的忌妒心,畢竟臉書你只會看到朋友好的一面,甚至他朋友跟別人快樂出去玩,他會不會覺得傷心朋友沒有邀情他?若你孩子是外向的人,這些忌妒不會讓他做下嚴重的錯事,但若孩子是內向和行為異常,你就應該減少孩子使用網路時間,並且鼓勵他出去走走,還有教導他在FaceBook只會看到人好一面,每個人私下都有痛苦的事,你只是沒看到罷了!還有,你出去走走才會遇到這一生摯友,你要相信世界這麼大一定有願意傾聽你說話朋友.若你身邊的人經常對生活不滿,不妨帶著他參加義工活動,尤其在醫院可以看到更多悲歡離合.我朋友曾經有一陣很憂慮和苦瓜臉,然而她去醫院住了兩三天,她回來整個人都不一樣,她跟我說出去一趟才知道自己眼界多狹小,原來自己憂鬱是多麼微不足道.


      這篇文章希望大家能從這次教訓多多關心身邊的人,不要讓下一次悲劇再發生,就像受害者家屬讓她丈夫不要白白為這次事件犧牲.鄭捷的問題就交給法律來判決,希望媒體多多關心受害者家屬,還有認真尋找解決方案不要再出現下一個鄭捷.


      Reference:
      [1] Mark Goulston M.D.,Just Listen: Discover the Secret to Getting Through to Absolutely Anyone,2009

      Chrome之Pin Tab:有效分頁管理

      當你關掉瀏覽器時,有沒有哪些分頁是暫時需要使用?

      圖一.設定瀏覽器的開始畫面

      一般來說,你可以到『設定』頁面的『起始畫面』中將這些分頁加入以後,每次開啟瀏覽器即開啟這些分頁內容.然而,它不像FaceBook或Yahoo經常瀏覽,這樣設置讓你每次開啟都看到多餘的分頁.例如: 當你碰到到某網站參加活動,甚至網頁任務尚未完成,你只需要這兩三天用到此網頁,你或許會將此網頁加入書籤,然而此網頁可能活動結束就失效,因此你的書籤裡多了一些不必要資訊,而且也造成管理上的困難.

      因此,我要介紹你使用固定分頁(Pin Tab)來管理你的分頁,他不但能暫時紀錄哪些未完成的網頁,而且只要簡單關閉分頁下次就不會開啟分頁.例如:當你在線上讀英文到一半時,你需要關機離開電腦,這時你利用固定此網頁,當你回來再開啟Chrome時,你看到之前固定的分頁就提醒自己未做完的事.另一方面,固定分頁讓你不必到瀏覽紀錄找網頁,甚至你刪除瀏覽紀錄,你下次開啟Chrome它仍然存在.

      固定分頁(Pin Tab)的優點

      • 紀錄今天未做完網頁,提醒自己
      • 做完此網頁任務,取消固定分頁,下次Chrome就不會開啟
      • 即使刪除歷史紀錄,下次開啟Chrome仍然能繼續瀏覽這些分頁

      安裝

      1. 首先,請將滑鼠移動你要固定的分頁,按下右鍵後點選『固定分頁』.

      2. 圖二.固定分頁(Pin Tab)


      3. 接著,此分頁將縮成圖標後在Chrome的左上方顯示,由於分頁刪除符號已消失,因此若要關閉此分頁,請按下右鍵後點選『關閉分頁

      4. 圖三.關閉『被固定的分頁』


      5. 最後,當你清除瀏覽歷史時,你下次開啟Chrome仍然開啟此分頁(如:7net網頁).

      壓抑的台灣: 尊敬正確的人



      有一天,我走在台灣街道上,我發現台灣文化與特色漸漸消失,讓我不禁思考追求資本主義是好的嗎?最近,營建署公布台北房價所得比高達15倍, 甚至是英國和澳洲的3倍,更諷刺的是媒體們經常幫某些大老闆批評年青人不耐操,卻在背後炒房剝奪台灣人權利和加大貧富差距,然而這些商人卻在媒體放在如此高的地位!例如:鴻海總裁郭台銘無庸置疑建立血汗公司,然而卻在媒體上任意批評台灣事物(博士賣雞排),然而你仔細思考他有帶給台灣正面意義嗎?我認為他讓台灣其他老闆學會如何濫用責任制,甚至壓榨員工得到更好的產能!我不認為郭董有資格得到那麼多媒體關注,比起他賣菜捐錢陳樹菊才值得台灣人尊敬.接下來,我們來思考『商人』應該在台灣的社會地位?




      圖一.士農工商(source: Wikimedia )

      Chrome擴充功能: 網頁去廣告Adblock Plus

      當上司經過你的電腦,他對圖片印象比較深刻?還是網站內容?


      如圖一所示,我想一般人都會從圖片來判斷你的瀏覽內容.另一方面,若你逛廣告很多的網站,尤其是線上漫畫或小說,這些網站通常讓電腦被惡意軟體(malmare)攻擊機會加大.因此,關掉JavaScript 和Plugin來擋掉能解決問題

      然而,關掉JavaScript會使網站某些功能不能使用.如圖一的Cambridge英文字典為例,若你關掉此網站的JavaScript,你就無法使用發音功能.因此,若你想保留網站的JavaScript功能的話,你可以使用Adblock Plus封鎖掉廣告讓經過的人不會誤解你的瀏覽內容,而且也保護你的電腦.

      圖一.Cambridge英文字典

      去廣告網站

      • Facebook
      • YouTube
      • Cambridge Dictionary
      • 大陸線上漫畫
      • 其他包含廣告網頁

      安裝

      1. 首先, 請到以下的網頁,點選『Install for Chrome』安裝套件.

      2. https://adblockplus.org/en/chrome
        

        圖二.安裝Adblock Plus


      3. 接著,,選擇『不允許任何網站使用我的攝影機或麥克風

      4. 圖三.確認安裝


      5. 最後,在右上角出現Adblock Plus的標誌和顯示封鎖廣告數,成功將Cambridge Dictionaries的廣告去掉.

      6. 圖四.成功遮蔽廣告

      Qt物件導向:繼承

      為什麼需要繼承其他類別?

      圖一.繼承QComboBox

      之前描述類別就如同產品設計圖可量產產品,程式設計者藉由宣告類別變數產生多個物件.然而,產品設計圖是會變動的,若直接在此設計圖塗改,就再也無法生產舊產品,因此我們通常會將舊的設計圖保存,新的設計圖將以此為範本來擴展產品功能.接下來,我將解釋繼承原理和實作.

      如圖一所示,被繼承的類別QComboBox稱為『父類別』,而繼承的類別MyComboBox是『子類別』.
      MyComboBox is a QComboBox= QComboBox is extended by MyComboBox

      繼承在英文經常用『 is a』描述父子類別的關係.簡單來說,MyComboBox是一個QComboBox,而MyComoBox以QComboBox為基礎擴充.若不懂,請你思考父親與男人所代表的意義!父親是一個男人,然而父親多了照顧小孩的責任.也就是說,即使這個男人多了扮演父親角色,不會改變他是一個男人.總而言之,子類別將擁有父類別的所有特性,也能對父類別進行功能擴展和修改,最重要的是子類別的任何修改都不會影響父類別.

      到目前為止,我想你應該充分了解什麼是繼承,接下來將教你如何實作圖一.MyComoBox主要擁有提示訊息功能,並且解決之前在QComboBox使用技巧一文中所提到使用者可編輯的問題.此範例根據GitHub-QtProject的範例修正QComboBox的功能.


      程式碼

      #ifndef MYCOMOBOX_H
      #define MYCOMOBOX_H
      
      #include <QComboBox>
      
      class MyComoBox : public QComboBox
      {
          Q_OBJECT
      
      public:
          explicit MyComoBox(QWidget *parent) :
              QComboBox(parent)
          {
              placeholder=QStringLiteral("請選擇縣市");
           //this->insertItem(0,placeholder);
          }
      private:
          QString placeholder;
      
      protected:
          void focusOutEvent(QFocusEvent *e)
          {
              QComboBox::focusOutEvent(e);
              if(this->findText(placeholder)!=-1)
              {
                  this->removeItem(this->findText(placeholder));
              }
          }
      
      };
      
      #endif // MYCOMOBOX_H
      



      說明

      1. placeholder: 顯示QComoboBox的提示訊息.
      2. override focusOutEvent 成員函數:主要發生在當使用者打開下拉式選單,由於placeholder不提供使用者選擇,因此我們需要移除此項目.首先,我們利用findText尋找是否有此選項.若有,呼叫removeItem移除此項目.
      3. 宣告此類別變數時,依照你的需求請手動加以下指令或改寫以上的程式碼.
      4. if(MyComoBox->findText(placeholder))
          MyComoBox->insertItem(0,placeholder);
        MyComoBox->setCurrentIndex(0);
        

      結果


      Chrome隱私權(續): 防止網站竊聽和偷窺


      你知道有網站會偷聽你麥克風內容嗎?


      如下圖所示,Chrome在Omnibox提示使用者此網站正在存取麥克風內容.Chrome的語音搜尋帶來許多人方便,然而不當的使用將洩漏你的資料.

      若你一旦允許網站存取你的攝影機和麥克風,你在任意時間進入此網站,它都可以知道你說了什麼.最糟的是,若網站具有木馬或病毒的話,它可以不經允許存取你的麥克風和內容,即使你離開此網站.PCWorld指出惡意網站可利用彈跳視窗和未顯示存取麥克風圖示下,它繼續存取你在電腦前說得任意內容.換句話說,如果惡意網站跳出廣告視窗,你卻忘記或關掉它繼續拜訪其他網站時,此網站在你沒有查覺到情況下繼續偷聽你的說話和竊取影像.

      圖一.語音搜尋功能

      Qt與Google Map: 利用Git下載範例

      你覺得可以在Qt執行Google Map嗎?

      答案: 可以,並且你也可以根據Google Map API去操縱Google地圖.

      如下圖一所示,在Integrated Computer Solution提供簡單Google操作範例,此範例會根據輸入地址在地圖加入Marker,並且在右側攔根據所選擇地標,進行地圖切換.然而,此範例需要很複雜的設置,因此我將從如何下載此範例說明,而在之後的文章才會解釋如何成功編譯此範例.

      圖一. 在Qt嵌入Google Map(source: Integrated Computer Solution )[1]



      測試環境


      圖二.Qt+Google Map範例位置

      教程

      1. 首先, 請到Git的首頁,然後選擇你作業系統,這裡範例為『Windows』,下載完成後請執行Git-1.9.0-preview20140217.exe. 

      2. 圖三.下載Git 工具

      3. 接著,請依照以下影片的步驟安裝Git工具.



      4. 安裝完成後,請打開Git Bash後,輸入以下的指令後.會出現下載成功訊息

      5. git clone https://code.google.com/p/qt-google-maps/
        

        圖四.在Git Bash利用Git Clone下載範例
      6. 最後,請到你所在使用者的資料夾即看到下載好的範例.

      7. 圖五.qt-google-map所在位置

      [1]Integrated Computer Solution
      http://www.ics.com/technologies/qt-based-clients-google-apis#.UzGM4vmSyb0