第三課、Qt的誕生和本質------------------狄泰軟件學院

一、GUI用戶界面元素

(1)、GUI應用程序是由固定的窗口元素所構成

(2)、操作系統提供了創建用戶界面元素所需要的函數

(3)、各自功能不同的函數依次調用,從而創建出界面元素

(4)、操作系統提供的元素函數無法直接映射到界面元素

二、面向對象的GUI應用程序設計

1、GUI應用程序的應用

(1)、GUI應用程序是為了解決非科學計算問題而誕生的

(2)、GUI應用程序適用于非專業的日常生活領域

(3)、面向過程程序設計方法學不適合GUI程序設計

(4)、面向對象程序設計方法學更適合GUI程序設計

2、用面向對象的方法看待GUI程序設計

(1)、用面向對象的方法看待GUI界面元素

(2)、所有的界面元素都可以看做實際的對象

(3)、GUI用戶界面是由各不相同的對象組成的

(4)、如主窗口對象

A、菜單對象

B、按鈕對象

C、文本框對象

3、GUI應用程序非常適合采用面向對象的方法學

(1)、將界面元素定義成對應的類

(2)、通過抽象和封裝可以隱藏界面元素的細節

(3)、程序的創建過程就是組合不同元素對象的過程

//main.cpp

#include <windows.h>
#include "Application.h"
#include "MainWindow.h"
#include "PushButton.h"BOOL WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{Application  a(hInstance, lpCmdLine);MainWindow w(hInstance, L"Main Window");PushButton b(&w, L"My Button");w.show();return a.exec();
}
View Code

//Application.h

#pragma  once#include <windows.h>class Application
{
public:Application(HINSTANCE hInstance, LPSTR lpCmdLine);bool exec();
};
View Code

//Application.cpp

#include "Application.h"Application::Application(HINSTANCE hInstance, LPSTR lpCmdLine)
{}bool Application::exec()
{MSG msg = { 0 };//進入消息循環while ( GetMessage(&msg, NULL, 0, 0)){//翻譯并轉換系統消息TranslateMessage(&msg);//分發消息到對應的消息處理函數DispatchMessage(&msg);}return TRUE;
}
View Code

//Widget.h

#pragma  once#include <windows.h>class Widget
{
protected:Widget* m_parent;HWND    m_hwnd;
public:Widget();Widget(Widget* parent);HWND hwnd();Widget* parent();
};
View Code

//Widget.cpp

#include "Widget.h"Widget::Widget()
{m_parent = NULL;
}Widget::Widget(Widget* parent)
{m_parent = parent;
}HWND Widget::hwnd()
{return m_hwnd;
}Widget* Widget::parent()
{return m_parent;
}
View Code

//MainWidow.h

#pragma once#include "Widget.h"class MainWindow : public Widget
{
protected:static const wchar_t STYLE_NAME[];//主窗口定義
    BOOL DefineMainWindow(HINSTANCE hInstance);//主窗口創建void CreateMainWindow(HINSTANCE hInstance, const wchar_t* title);//主窗口消息處理函數static LRESULT CALLBACK WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam);public:MainWindow(HINSTANCE hInstance, const wchar_t* title);void show();
};
View Code

//MainWidow.cpp

#include "MainWindow.h"const wchar_t MainWindow::STYLE_NAME[] = L"MainForm";//主窗口定義
BOOL MainWindow::DefineMainWindow(HINSTANCE hInstance)
{static WNDCLASS WndClass = { 0 };//系統結構類型,用于描述窗口樣式
WndClass.style         = 0;WndClass.cbClsExtra    = 0;WndClass.cbWndExtra    = 0;WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW);          //定義窗口背景色WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);     //定義鼠標樣式WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION); //定義窗口左上角圖標WndClass.hInstance     = hInstance;                       //定義窗口樣式屬于當前應用程序WndClass.lpfnWndProc   = (WNDPROC)WndProc;                //窗口消息處理函數WndClass.lpszClassName = STYLE_NAME;                      //窗口樣式名WndClass.lpszMenuName  = NULL;//將定義好的窗口樣式注冊到系統上return RegisterClass(&WndClass);
}//主窗口創建
void MainWindow::CreateMainWindow(HINSTANCE hInstance, const wchar_t* title)
{m_hwnd = CreateWindow(STYLE_NAME,         //通過定義好的窗口樣式創建主窗口title,              //主窗口標題WS_OVERLAPPEDWINDOW,//創建后主窗口的顯示風格CW_USEDEFAULT,      //主窗口左上角x坐標CW_USEDEFAULT,      //主窗口左上角y坐標CW_USEDEFAULT,      //主窗口寬度CW_USEDEFAULT,      //主窗口高度NULL,               //父窗口NULL,               //主窗口菜單hInstance,          //主窗口屬于當前應用程序
                        NULL);
}//主窗口消息處理函數
LRESULT CALLBACK MainWindow::WndProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_DESTROY:PostQuitMessage(0);break;default://調用系統提供的默認消息處理函數return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}MainWindow::MainWindow(HINSTANCE hInstance, const wchar_t* title) :Widget(NULL)
{DefineMainWindow(hInstance);CreateMainWindow(hInstance, title);
}void MainWindow::show()
{ShowWindow(m_hwnd, SW_SHOWNORMAL);  //顯示窗口UpdateWindow(m_hwnd);               //刷新窗口
}
View Code

//PushButton.h

#pragma  once#include "Widget.h"class PushButton : public Widget
{
public:PushButton(Widget* win, const wchar_t* text);
};
View Code

//PushButton.cpp

#include "PushButton.h"PushButton::PushButton(Widget* win, const wchar_t* text)
{HINSTANCE hInstance = (HINSTANCE)GetWindowLong(win->hwnd(), GWL_HINSTANCE);m_hwnd = CreateWindow(L"button",                            //通過系統預定義的窗口樣式創建元素text,                                 //窗口元素標題WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,//創建后窗口元素的顯示風格50,                                   //窗口元素在主窗口左上角x坐標50,                                   //窗口元素在主窗口左上角y坐標200,                                  //窗口元素寬度60,                                   //窗口元素高度win->hwnd(),                          //父窗口(HMENU)this,                          //窗口元素ID值hInstance,                            //窗口元素屬于當前應用程序
                        NULL);
}
View Code

三、QT的本質

(1)、QT是利用面向對象方法學開發的一套GUI組件庫

(2)、QT將不同操作系統的GUI細節封裝于類的內部

(3)、QT提供一套跨平臺的類用于開發GUI程序

(4)、QT遵循經典的GUI應用程序開發模式

四、小結

(1)、GUI程序開發更適合采用面向對象方法學

(2)、所有的界面元素都可以看做是實際的對象

(3)、GUI用戶界面是由各不相同的對象組成的

(4)、QT是利用面向對象方法學開發的一套GUI組件庫

(5)、QT將GUI細節封裝于類的內部,具有跨平臺的特性  

轉載于:https://www.cnblogs.com/gui-lin/p/6385174.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457221.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457221.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457221.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java mapstring_ object 遍歷_ListMapString,Object使用Java代碼遍歷以獲取String,Object的值...

List>的結果集怎么使用Java代碼遍歷以獲取String&#xff0c;Object的值&#xff1f;package excel;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class List1{public static void main(String[] args){Map map…

Linux tar命令高級用法——備份數據

Linux tar命令高級用法——備份數據 2015-12-31 Linux學習Linux上有功能強大的tar命令&#xff0c;tar最初是為了制作磁帶備份&#xff08;tape archive&#xff09;而設計的&#xff0c;它的作用是把文件和目錄備份到磁帶中&#xff0c;然后從磁帶中提取或恢復文件。現在我們可…

iOS uiviewcontroller 添加另外一個controller的View

需要 添加 [self addChildViewController:vc]; [_mainScrollView addSubview:vc.view];轉載于:https://www.cnblogs.com/foolish-guo/p/6385288.html

mysql 即學a又學b_MySQL學習第一天

一、 數據庫:*學習重點:創建數據庫/向表添加記錄/查詢記錄數據庫概念:文件系統(存儲和管理)數據庫軟件介紹:Oracle/MySQL/SQL server…分類:關系型數據庫:關系模型組織數據非關系型數據庫:鍵值對關系存儲二、 mysql數據的存儲方式:一臺數據庫服務器中會創建很多個數據庫(一個項…

Intellij IDEA 快捷鍵(Mac)

編輯 格式化代碼 AltCommandL 大小寫切換 ShiftCommandU 包圍 AltCommandT 選中代碼抽取方法 AltCommandM 調試/運行查看 類關系視圖 CommandAltU 查看所有的 TODO Command6 查詢方法調用處 AltF7 搜索其它 隱藏 Intellij IDEA CommandH 自動提醒 Alt/(這是我自己設置的)…

Spark RDD算子介紹

Spark學習筆記總結 01. Spark基礎 1. 介紹 Spark可以用于批處理、交互式查詢&#xff08;Spark SQL&#xff09;、實時流處理&#xff08;Spark Streaming&#xff09;、機器學習&#xff08;Spark MLlib&#xff09;和圖計算&#xff08;GraphX&#xff09;。 Spark是MapReduc…

java 寫tb級文件_三管齊下!TB 級文件的上傳性能瞬間被優化 100 倍!

作者 | 中華石杉責編 | 伍杏玲本文經授權轉載石杉的架構筆記(ID&#xff1a;shishan100)這篇文章我們來看看&#xff0c;世界上最優秀的分布式文件系統HDFS&#xff0c;是如何對超大文件的上傳做性能優化的&#xff1f;首先&#xff0c;我們還是通過一張圖來看一下文件上傳的大…

CentOS7下安裝Redis — 單節點

2019獨角獸企業重金招聘Python工程師標準>>> 1. 環境準備 安裝編譯所需要的包&#xff1a; yum install gcc tcl 2. 下載redis http://download.redis.io/releases/redis-3.2.7.tar.gz 3. 安裝redis ## 創建redis的安裝目錄 mkdir /usr/local/redis## 解壓redis tar…

筆記本中美化代碼的方法

這里向大家推薦一個很好用的記筆記軟件,微軟的OneNote,這個筆記軟件,支持分區和分區組的創建,而且入門簡單,界面簡潔,很適合從word過渡過來的人來記筆記! 不過如果直接記筆記,對于程序員來說,可能希望代碼在筆記本上更好看一些,那么應該怎么辦呢?下面提供了在OneNote中,讓代碼…

工具使用——印象(匯總)

作者&#xff1a;桂。 時間&#xff1a;2017-02-09 23:11:30 鏈接&#xff1a;http://www.cnblogs.com/xingshansi/articles/6384097.html 說明&#xff1a;轉載請注明出處&#xff0c;謝謝。 前言 本文僅僅介紹印象筆記的使用&#xff0c;至于挖掘機哪家強&#xff0c;本文不…

java final修飾屬性_Java final關鍵字用來修飾類、方法、屬性

1.final修飾類&#xff1a;這個類不能被繼承。如&#xff1a;String類、StringBuffer類、System類。2.final修飾方法&#xff1a;不能被重寫。如&#xff1a;Object類的getClass()方法。3.final修飾屬性&#xff1a;此屬性就是一個常量&#xff0c;一旦初始化就不可再被賦值。習…

SQL SERVER 數據導出JSON

執行下面的存儲過程&#xff1a; SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE[dbo].[SerializeJSON](ParameterSQL AS VARCHAR(MAX))ASBEGINDECLARE SQL NVARCHAR(MAX)DECLARE XMLString VARCHAR(MAX)DECLARE XML XMLDECLARE Paramlist NVARCHAR(1000)SET …

JSP+Javabean+Servlet實現用戶注冊

在entity包下新建javabean 也就是實體類User 注意id用 Integer 而不用 int&#xff0c; 因為 int 自動初始化為0 public class User { private Integer id; private String username; private String password; 后面是set和get方法... 在Servlet包下創建servlet 右擊Servlet…

main的方法是Java_Java中的main()方法

在Java中&#xff0c;main()方法是Java應用程序的入口方法&#xff0c;也就是說&#xff0c;程序在運行的時候&#xff0c;第一個執行的方法就是main()方法&#xff0c;這個方法和其他的方法有很大的不同&#xff0c;比如方法的名字必須是main&#xff0c;方法必須是public sta…

深入理解Python的logging模塊:從基礎到高級

在Python編程中&#xff0c;日志記錄是一種重要的調試和錯誤追蹤工具。Python的logging模塊提供了一種靈活的框架&#xff0c;用于發出日志消息&#xff0c;這些消息可以被發送到各種輸出源&#xff0c;如控制臺、文件、HTTP GET/POST位置等。本文將深入探討Python的logging模塊…

http請求連接

1、在Info.plist中添加NSAppTransportSecurity類型Dictionary。2、在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設為YES轉載于:https://www.cnblogs.com/liuting-1204/p/5919233.html

數據庫不完全恢復 以及恢復到測試環境:

sample 1: 1.清空歸檔日志 RMAN> crosscheck archivelog all; RMAN> delete achivelog all; 2.清空數據文件。 select name from v$datafile; rm v$datafile 3.恢復數據 ##check file date: ##把db數據恢復到&#xff1a;2017-02-05 00:00:00 ls -lt /ngenprdblog/ ls…

centos7安裝java6_CentOS7.6安裝jdk1.8

2、登錄Linux服務器&#xff0c;通過rz命令將jdk導入服務器如果沒有rz命令 需要先安裝lrzszyum install lrzsz -y3、將jdk壓縮包解壓到指定路徑 -C 指定路徑4、配置環境變量編輯/etc/profile文件 在末尾加上以下內容 wq保存退出source /etc/profile文件 使配置文件生效export J…

ubuntu安裝wkhtmltopdf

下載安裝wkhtmltox系統環境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtmltopdf/downloads/wkhtmltox-0.13.0-alpha-7b36694_linux-precise-amd64.deb dpkg -i 安裝包名字 當我把它生成pdf的時候我想讓每個塊都是一頁&#xff0c;經過…

人生苦短,我用python——當我在玩python的時候我玩些什么 -

程序的基本思路 用一個txt文件記錄電腦的一天內累計使用時間累計使用時間超過若干小時就會自動關機程序開機自動運行 為什么我最后選擇了python 想著怎么寫、搜資料的時候就發現Java并不適合&#xff0c;雖然不是不能實現&#xff0c;但有好幾個問題解決起來都有點麻煩。對我這…