• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            千張筆記

            Email:rain_qian830@163.com
            posts - 28, comments - 42, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            QT筆記(1)-基礎知識

            Posted on 2010-07-19 17:11 千張 閱讀(1310) 評論(0)  編輯 收藏 引用 所屬分類: QT學習
            Qt有兩個重要概念:“信號和槽”和“布局”
            Qt用“信號和槽”代替windows編程中的callback機制,通過“信號和槽”來完成不同對象之間的通信,以及完成相應用戶的操作,可以用于任何QObject的子類中。

            槽和普通的C++成員函數幾乎是一樣的:可以是虛函數,可以被重載,可以是共有的,保護的或私有的,并且也可以被其他C++成員函數直接調用,參數也可以是任意類型。
            不同之處是:槽可以和信號連接在一起,在這種情況下,每當發射這個信號的時候,就會自動調用這個槽。

            connect()語句如下:connect(sender,SIGNAL(signal),receiver,SLOT(slot));
            這里的sender和receiver是指向QObject的指針,signal和slot是不帶參數的函數名,“信號和槽”的一些性質如下:
            1.一個信號可以連接多個槽
               在發射這個信號的時候,會以不確定的順序一個接一個地調用這些槽。
            2.多個信號可以連接同一個槽
            3.一個信號可以與另外一個信號相連接
               connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SIGNAL(updateRecord(const QString &)));
               當發射第一個信號時,也會發射第二個信號,除此之外,信號與信號的連接,和信號與槽的連接是難以區分的。
            4.連接可以被移除
               disconnect(...)
            5.signal和slot必須有相同的參數類型,如果信號的參數比它所連接的槽的參數多,那么多余的參數將會被簡單地忽略掉。如果參數類型不匹配,或在信號和槽的名字中包含了參數名,Qt也會發出警告。

            布局:用來管理窗口中窗口部件的幾何形狀,能對其所負責的窗口部件的尺寸大小和位置進行設置,Qt主要有三種布局管理器類:
            QHBoxLayout:在水平方向上排列窗口部件,從左到右。
            QVBoxLayout:在豎直方向上排列窗口部件,從上到下。
            QGridLayout:把各個窗口部件排列在一個網格中。

            emit是Qt中的關鍵字,它能發射信號,像其他Qt擴展一樣,它也會被C++預處理器轉換成標準的C++代碼。

            元對象系統(meta-object system)
            Qt的一個最主要的成功是對C++擴展,即把彼此獨立的軟件模塊連接起來,而不需要模塊間的任何細節。

            這個機制就是Meta-Object系統,它提供了兩個關鍵的用途:信號和槽 與 introspection(內省)。introspection功能允許應用程序在運行時得到QObjec它子類的“meta-information”,這對實現信號和槽是很必要的,包括全部信號和槽的列表,以及類的名字。這個機制還提供了屬性(在Qt Designer中使用)和文本翻譯(國際化)支持。它們構成了QSA(Qt Script for Application)的基礎。

            標準C++不提供Qt meta-object系統需要的動態meta-information。Qt提供了一個獨立的工具moc,通過定義Q_OBJECT宏實現到C++函數的轉變。moc是用純C++實現的,因此可以使用在任何C++編譯器中。

            這個機制工作過程如下:

            Q_OBJECT聲明了一些QObject子類必須實現的內省函數:metaObject(),TR(),qt_metacall()等。

            Qt的moc工具實現Q_OBJECT宏聲明的函數和所有的信號。

            QObject成員函數connect()和disconnect()使用這些內省函數實現信號和槽的連接。

            以上這些是通過qmake,moc和QObject自動處理的,程序員通常不用考慮它們。如果你感到對此好奇,可以查看QMetaObject類文檔和moc實現的C++代碼。
            91久久精一区二区三区大全| 一日本道伊人久久综合影| 久久香蕉国产线看观看精品yw| 日日噜噜夜夜狠狠久久丁香五月| 精品久久久久久国产潘金莲| 丰满少妇人妻久久久久久4| 久久综合九色综合久99| 久久久久久精品久久久久| 久久精品国产亚洲AV电影| 久久国产高清一区二区三区| 97精品依人久久久大香线蕉97 | 色综合久久中文字幕无码 | av无码久久久久久不卡网站| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久婷婷激情综合色综合俺也去| 午夜不卡888久久| 久久久久高潮综合影院| 久久99国产一区二区三区| 伊人久久久AV老熟妇色| 久久亚洲国产精品五月天婷| 久久精品亚洲中文字幕无码麻豆| 久久丝袜精品中文字幕| 99国产精品久久久久久久成人热| 亚洲精品乱码久久久久久蜜桃 | 亚洲国产成人久久综合碰碰动漫3d| 久久精品国产一区二区电影| 久久天天躁狠狠躁夜夜网站| 亚洲精品国产综合久久一线| 丰满少妇人妻久久久久久4| 久久国产精品一国产精品金尊 | 国内精品久久久久久久影视麻豆| 蜜臀av性久久久久蜜臀aⅴ麻豆| 欧美与黑人午夜性猛交久久久 | 国产福利电影一区二区三区,免费久久久久久久精 | 国产精品永久久久久久久久久| 久久精品国产亚洲av影院| 伊人久久综合无码成人网| 亚洲AV无码久久寂寞少妇| 人妻丰满AV无码久久不卡 | 日韩精品久久久肉伦网站| 日韩精品无码久久久久久|