Qt初體驗(二)

來源:互聯網
上載者:User

標籤:widget   extern   電腦   ati   讀取   read   cli   www.   tail   

QT初體驗(二)1.視窗跳轉

  想到視窗跳轉的實現方式,應該很容易想到建立開啟新的視窗,然後關閉當前視窗

  首先我們得建立一個視窗的類,然後在當前類中建立這個類的對象,調用Show()函數顯示出新視窗,close()函數關閉當前視窗

  實現的方式大概就是下面這個樣子:

ui2 = new Select();ui2->show();this->close();

  接下來說一下建立新的視窗類別的方法:

  

  

  選擇widget,添加

  注意,這裡只會給你產生一個.ui檔案,而.h和.cpp則需要自己再去建立,也就是說再添加一個類(添加類的方法就不再贅述),名字和這個最好保持一致

  接下來就是給自己添加好標頭檔之類的,因為這個是不會給你寫的,有幾個需要注意的是:

  1.   ui_xxx.h標頭檔,這個需要你先把.ui檔案編譯一下(右鍵點擊),然後重開一下VS才可以識別(當然不在意那些紅杠杠的話可以不用在意2333)

  2. 繼承類這樣的照著寫就可以了,然後這個Q_OBJECT是一定一定一定要寫的,因為Q_OBJECT相當於是一個宏定義,裡麵包含了很多QT的函數,如果沒有這個,這個視窗就是一死視窗,沒有任何功能,任何關於這個有一點需要注意的是這個需要一個moc_xxx.cpp檔案,可以先去項目的檔案夾中找找,如果沒有可以按48316271中的方法解決

    

  大概是這樣的目錄下吧 

  3.視窗迴圈(互相)跳轉

    比如說我從A視窗->B視窗,再從B視窗->A視窗,這樣的話,按我們上面的方法,那麼A.h中一定會包含B.h,B.h中也一定會包含A.h,這樣的話在預先處理階段,標頭檔寫入的時候就會進入死迴圈,這時候也就需要用到另外的聲明方式extern,41214539,大致上可以去看這篇部落格,裡面的strong沒什麼用...,看看extern的格式就好,也可以去瞭解extern的其他用法,比如共用變數?我也不知道該怎麼說...就是一個檔案中的變數,讓它在其他的檔案中也可以使用,並能修改 保留值。

  建立視窗實現跳轉大概也就是這樣的過程吧

 2.利用QTcpSocket類和QTcpServer類實現簡單的用戶端和伺服器之間的通訊

    首先我們來瞭解一下socket通訊的流程(以下內容我不一定能解釋清楚...大概知道原理以及怎麼用...畢竟電腦網路我還沒有學...)

     

  

  中的左邊是clinet,右邊是server。

  server的生命週期大致如下:

  1. 建立socket。
  2. 綁定(bind)地址連接埠
  3. 監聽網路連接
  4. 接受串連
  5. 關閉串連

  clinet的生命週期則稍微簡單點:

  1. 建立socket
  2. 綁定地址
  3. 發起串連
  4. 關閉串連

  下面來講一下具體的使用

  1)伺服器

  首先是伺服器的,我們先初始化QTcpServer和QTcpSocket類的對象

    this->tcpServer = new QTcpServer(this);    this->tcpSocket = new QTcpSocket(this);

  接下來利用QT的connect函數串連server和acceptConnection函數

connect(tcpServer, SIGNAL(newConnection()), this, SLOT(acceptConnection()));

   emmm,這段代碼的意思就是在tcpServer接受到newConnection訊號之後執行acceptConnection函數,也就是接收到新的串連請求就接受串連,acceptConnection函數如下:

void Server::acceptConnection(){tcpSocket = tcpServer->nextPendingConnection();connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveData()));  }

  這段代碼的意思就是擷取tcp串連,然後賦值給tcpSocket,然後把Socket和receiveData函數串連起來,在接受到readyRead訊號之後執行receiveData函數,receiveData函數(需要自己寫,也不一定要叫這個名字)則是接收資訊之後的處理函數(看自己的需求),我只簡單的用到了readAll和write函數,分別是讀取和發送,用法可以參考下面的代碼

QString data = tcpSocket->readAll();QString sendData;tcpSocket->write(sendData.toLatin1());

  sendData就是伺服器發送給用戶端的資訊,具體是什麼看自己的需求

  回到正軌,光只是設計好串連還不夠,上面的listen(監聽並沒有實現),下面是監聽的方式

tcpServer->listen(QHostAddress::Any, 8000)

  listen函數兩個參數分別是ip和連接埠,ip就可以利用這個函數來擷取,後面的連接埠則自己選擇(大於5000應該就可以了)

  到這裡伺服器的解釋就結束了,下面是用戶端的

  2)用戶端

  用戶端的相對伺服器要做的準備要少一點

  第一步,初始化Socket,方式和伺服器一樣

  第二步,取消當前串連,串連伺服器

tcpSocket->abort();   //取消已有的串連tcpSocket->connectToHost(ip, port);connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readMessages()));

  第三步,發送接收資訊,這個與伺服器也是一樣的,readAll和write函數即可

3.程式打包

  由於調用了QT的庫,所以要在別的電腦上也能啟動並執行話(64位在32位電腦上還是不行的...不要問我為什麼知道...),可以利用Qt的打包工具進行打包,詳情可以參考這篇部落格78167059?locationNum=6&fps=1

  

  這次結對程式設計項目的收穫基本總結完畢,感謝助教的協助以及前輩們的總結,讓我在做學習的路上少走了很多彎路

  關於socket方面主要參考的三篇篇部落格:

  64923685

  72566198

  https://www.jianshu.com/p/3f42172f582b

  再次感謝

 

  

  

 

Qt初體驗(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.