• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            QT筆記(1)-基礎(chǔ)知識(shí)

            Posted on 2010-07-19 17:11 千張 閱讀(1309) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): QT學(xué)習(xí)
            Qt有兩個(gè)重要概念:“信號(hào)和槽”和“布局”
            Qt用“信號(hào)和槽”代替windows編程中的callback機(jī)制,通過(guò)“信號(hào)和槽”來(lái)完成不同對(duì)象之間的通信,以及完成相應(yīng)用戶(hù)的操作,可以用于任何QObject的子類(lèi)中。

            槽和普通的C++成員函數(shù)幾乎是一樣的:可以是虛函數(shù),可以被重載,可以是共有的,保護(hù)的或私有的,并且也可以被其他C++成員函數(shù)直接調(diào)用,參數(shù)也可以是任意類(lèi)型。
            不同之處是:槽可以和信號(hào)連接在一起,在這種情況下,每當(dāng)發(fā)射這個(gè)信號(hào)的時(shí)候,就會(huì)自動(dòng)調(diào)用這個(gè)槽。

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

            布局:用來(lái)管理窗口中窗口部件的幾何形狀,能對(duì)其所負(fù)責(zé)的窗口部件的尺寸大小和位置進(jìn)行設(shè)置,Qt主要有三種布局管理器類(lèi):
            QHBoxLayout:在水平方向上排列窗口部件,從左到右。
            QVBoxLayout:在豎直方向上排列窗口部件,從上到下。
            QGridLayout:把各個(gè)窗口部件排列在一個(gè)網(wǎng)格中。

            emit是Qt中的關(guān)鍵字,它能發(fā)射信號(hào),像其他Qt擴(kuò)展一樣,它也會(huì)被C++預(yù)處理器轉(zhuǎn)換成標(biāo)準(zhǔn)的C++代碼。

            元對(duì)象系統(tǒng)(meta-object system)
            Qt的一個(gè)最主要的成功是對(duì)C++擴(kuò)展,即把彼此獨(dú)立的軟件模塊連接起來(lái),而不需要模塊間的任何細(xì)節(jié)。

            這個(gè)機(jī)制就是Meta-Object系統(tǒng),它提供了兩個(gè)關(guān)鍵的用途:信號(hào)和槽 與 introspection(內(nèi)省)。introspection功能允許應(yīng)用程序在運(yùn)行時(shí)得到QObjec它子類(lèi)的“meta-information”,這對(duì)實(shí)現(xiàn)信號(hào)和槽是很必要的,包括全部信號(hào)和槽的列表,以及類(lèi)的名字。這個(gè)機(jī)制還提供了屬性(在Qt Designer中使用)和文本翻譯(國(guó)際化)支持。它們構(gòu)成了QSA(Qt Script for Application)的基礎(chǔ)。

            標(biāo)準(zhǔn)C++不提供Qt meta-object系統(tǒng)需要的動(dòng)態(tài)meta-information。Qt提供了一個(gè)獨(dú)立的工具moc,通過(guò)定義Q_OBJECT宏實(shí)現(xiàn)到C++函數(shù)的轉(zhuǎn)變。moc是用純C++實(shí)現(xiàn)的,因此可以使用在任何C++編譯器中。

            這個(gè)機(jī)制工作過(guò)程如下:

            Q_OBJECT聲明了一些QObject子類(lèi)必須實(shí)現(xiàn)的內(nèi)省函數(shù):metaObject(),TR(),qt_metacall()等。

            Qt的moc工具實(shí)現(xiàn)Q_OBJECT宏聲明的函數(shù)和所有的信號(hào)。

            QObject成員函數(shù)connect()和disconnect()使用這些內(nèi)省函數(shù)實(shí)現(xiàn)信號(hào)和槽的連接。

            以上這些是通過(guò)qmake,moc和QObject自動(dòng)處理的,程序員通常不用考慮它們。如果你感到對(duì)此好奇,可以查看QMetaObject類(lèi)文檔和moc實(shí)現(xiàn)的C++代碼。
            伊人久久综在合线亚洲2019| 午夜精品久久久久久99热| 国产精品99久久免费观看| 久久伊人精品青青草原高清| 无码人妻少妇久久中文字幕 | 欧美久久久久久| 国产A三级久久精品| 国产精品无码久久久久| 亚洲精品无码成人片久久| 精品综合久久久久久88小说| 日韩久久久久久中文人妻| 久久综合精品国产一区二区三区| 国产成人无码精品久久久免费| 尹人香蕉久久99天天拍| 久久综合久久综合九色| 伊人久久综合精品无码AV专区| 久久99久久无码毛片一区二区| 久久久久无码精品国产不卡| 国产精品美女久久福利网站| 久久青青草原精品国产软件| 69SEX久久精品国产麻豆| 久久久女人与动物群交毛片| 2021国产精品午夜久久| 久久综合视频网站| 久久这里有精品视频| 亚洲国产精品久久久久网站| 国产成人精品免费久久久久| 久久丫精品国产亚洲av不卡 | 婷婷伊人久久大香线蕉AV| 久久夜色撩人精品国产| 久久久国产精华液| 久久午夜福利电影| 伊人色综合九久久天天蜜桃| 久久久久国产精品嫩草影院| 欧美成a人片免费看久久| 久久久久综合中文字幕| 久久久久久av无码免费看大片| 国产激情久久久久影院老熟女| 精品国产一区二区三区久久蜜臀| 99久久夜色精品国产网站| 国产成人综合久久久久久|