小玩具——溫度採集專案(六)
成功地進入了主介面,就只看到了一個按鍵,一個區域的劃分,剩下的啥都沒有,其實我是想加上一些美圖在旁邊的,在進入通訊之後就會消失,不過。。。變懶了。
好,在我們點選了那個唯一的按鈕之後,我們進入一個對話方塊,進行選擇ip地址和埠號,可能會有一些bug,因為我是完全按照點選進去就設定就ok,沒有考慮其他的情況做出相應的操作。
這個設定的對話方塊,我想實現的就是在點選ok之後就在主介面顯示相應的資訊(ip地址,埠號,本地ip等),還是一些按鍵,等等。所以,怎麼才能實現呢?對話方塊是放在dialog這個類中,我在考慮如果減少類間的耦合,當然不可能減為0的,畢竟你還要主介面中呼叫這些函式,我就在該類中宣告這個類物件指標,我之前是想宣告指標的話是在堆中申請的,手動刪除才會刪除,生命週期長一些,如果在棧中宣告,宣告週期短一些,但是看了pIpml的手法,好像優勢很多啊。在widget的建構函式中new,在解構函式中delete,好像我定義了一個友元函式去deletedialog類中定義的指標,我不記得為什麼我要這麼做了。。。。難道在主介面析構的時候,delete掉的不會把它所包含的東西全部delete?
應該是不必要的吧?
好了,實現它我就使用了一個bool 型別,在點選ok的時候return true,在tcp/client這個槽函式內進行判斷
if(!socket_dialog->dia_tcp_client())
和登陸介面的類似,return true就把剩下的介面給顯示出來。
在後面的程式碼中,需要注意的是,比如說QPushButton btn = new QPushButton(父視窗);我是想加在一個groupBox上的,剛開始沒太注意,寫的是this,也就是以widget作為父視窗,而groupBox在new的時候也是this,也就是groupBox和btn是同級的,誰後放就誰就覆蓋誰,而我的groupBox會蓋在btn上,導致的結果是,我的按鈕點選不了了,這個細節也讓我搗鼓了好久。需要注意。
還有一些是我實在搞不動了,直接是先定義了它的存在,但是setHidden(true),讓它先不顯示,但是它已經佔用了空間,我也沒有想到一個比較好的方法,可以更方便的控制,在我點選進入後再new,佔用空間的方法。
連線按鈕就真正實現通訊“線路”的搭建了。這個就沒什麼好說的了。
QDialog *dia; dialog::dialog(QWidget *parent) { dia = new QDialog(parent); } //友元函式 void free_dialog(dialog *d) { delete d->dia; } Widget::~Widget() { free_socket(ctn); //友元函式釋放socket free_dialog(socket_dialog); //友元函式回收dialog_socket } //connection *ctn; //tcp連線 //dialog *socket_dialog; //在widget類中聲明瞭這兩個類物件