Đồ Án Xây Dựng Ứng Dụng Carplay Cho Ô Tô. Automotive là chỉ đến những phần mềm được lập trình dùng để sản xuất, điều khiển, thiết kế, vận hành hệ thống thông tin và phát triển hỗ trợ sản xuất của các loại ô tô hiện nay. Cùng với sự phát triển mạnh mẽ của các dòng xe điện, xe tự hành khiến cho phần mềm Automotive trong sản xuất ô tô đóng một vai trò vô cùng quan trọng. Ngoài việc Automotive đóng góp một phần to lớn cho các tiện ích trong ô tô được phát triển như hệ thống giải trí, hệ thống an toàn, hệ thống quản lý kiểm soát ô tô, hệ thống tích hợp các thiết bị với các thiết bị thứ ba, …Automotive còn mang đến cho con người những trải nghiệm tốt nhất của công nghệ điện đại nhất, an toàn nhất.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DÂN LẬP PHƯƠNG ĐÔNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG
ĐỐ ÁN TỐT NGHIỆP
CÔNG NGHỆ THÔNG TIN
TÔ
Trang 2ĐỐ ÁN TỐT NGHIỆP
CHUYÊN NGÀNH: Công nghệ thông tin
GIẢNG VIÊN HƯỚNG DẪN SINH VIÊN THỰC HIỆN
Vũ Thị Thương Nguyễn Hữu Kiên
Hà Nội – Năm 2023
Trang 5LỜI MỞ ĐẦU
Trong những năm trở lại đây, xe hơi đã có sự chuyển biến rất nhiều, Công
nghệ ô tô (Automotive) xuất hiện, phát triển rất mạnh và đã trở nên phổ biến
trong ngành công nghiệp ô tô thế giới Những “ông lớn” trong ngành đều đã áp dụng công nghệ hiện đại tiên tiến vào ô tô để tạo những tiện ích có chất lượng phục vụ tốt nhất cho người sử dụng và điều đó là một cuộc chạy đua của những hãng xe trên thị trường hiện nay
Automotive là chỉ đến những phần mềm được lập trình dùng để sản xuất,
điều khiển, thiết kế, vận hành hệ thống thông tin và phát triển hỗ trợ sản xuất của các loại ô tô hiện nay Cùng với sự phát triển mạnh mẽ của các dòng xe điện, xe
tự hành khiến cho phần mềm Automotive trong sản xuất ô tô đóng một vai trò vô cùng quan trọng Ngoài việc Automotive đóng góp một phần to lớn cho các tiện
ích trong ô tô được phát triển như hệ thống giải trí, hệ thống an toàn, hệ thống quản lý kiểm soát ô tô, hệ thống tích hợp các thiết bị với các thiết bị thứ ba, …
Automotive còn mang đến cho con người những trải nghiệm tốt nhất của công
nghệ điện đại nhất, an toàn nhất
Nhận thấy được tầm quan trọng của việc áp dụng các công nghệ tiên tiến vào ô tô trong mục tiêu phát triển ngành công nghiệp ô tô Việt Nam nói chung vàngành công nghiệp ô tô Thế giới nói riêng, trong quá trình thực tập và làm việc tại Công ty TNHH Phần mềm FPT, và được sự hướng dẫn của các thành viên
trong dự án, em xin lựa chọn đề tài: “XÂY DỰNG ỨNG DỤNG CARPLAY
CHO Ô TÔ” để hoàn thành đồ án tốt nghiệp của mình.
Trang 6bộ phận cũng không kém phần quan trọng là màn hình thông minh.
Với màn hình có chất lượng tốt sẽ đưa hệ thống âm thanh trên ô tô của người sử dụng lên một tầm cao mới Những năm gần đây đã có những tiến bộ nhanh chóngtrong công nghệ, màn hình thông minh được tính hợp rất nhiều ứng dụng tiện íchphục vụ con người một cách tốt nhất
Hiện nay, trên xe hơi đều đã được trang bị sẵn màn hình nhưng màn hình thông mình được các tài xế quan tâm tới nhiều nhất và không ngại thay thế để có một chiếc màn hình sang trọng và hiện đại hơn mà còn giúp các tài xế giải quyết đượcnhiều vấn đề khác khi di chuyển
Và điều đó không ngoại lệ ở Việt Nam, việc xe ô tô ngày càng trở nên thông dụng trong mỗi người dân Việt Nam Chiếc xe không chỉ là phương tiện di chuyển cho các doanh nghiệp mà ngay cả các cá nhân và các gia đình cũng có nhu cầu sử dụng Ngoài việc thuận tiện cho việc đi lại thì xe hơi tạo sự nhàm chán và tù túng khi di chuyển một quãng đường dài Chính vì thế mà các phụ kiện nội thất ngày càng được các tài xế đầu tư, nổi bật nhất là màn hình thông minh Chúng là thiết bị công nghệ hiện đại đã đem lại nhiều trải nghiệm mới mẻ
và thú vị cho người dùng Và một chiếc màn hình thông minh cho xe ô tô sẽ có tất cả các thông số kỹ thuật tương ứng, nên người dùng sẽ cần phải nắm rõ về một số thông tin cơ bản dưới đây:
RAM/ROM: Bộ nhớ trong/ ngoài của màn hình Đây chính là cấu hình
quyết định máy có thể dung lượng lưu trữ ít hay nhiều
Trang 7 Kích thước màn hình: Inchfa là đơn vị đo lường kích thước màn hình
(dòng màn hình thông minh có bản sẽ có kích thước từ 7 inch trở lên tùy thuộc và yêu cầu của khách và thiết kế của các hãng màn hình) Và nếu người dùng không muốn căng mắt để xem màn hình, hãy xem xét một màn hình lớn như 9 inch hoặc 11 inch với các biểu tượng lớn và giao diện
dễ đọc Màn hình lớn khi hiển thị thông tin như tên album, nghệ sĩ và tên bài hát cũng rất hữu ích Mặt khác, hãy lưu ý đến khoảng không gian người dùng có trong xe để lắp màn hình Đừng mua một chiếc màn hình quá lớn so với không gian xe, vì như vậy sẽ mất đi tính thẩm mỹ và khiến bạn mất đi sự tập trung khi lái
Hệ điều hành: Phổ biến nhất là hệ điều hành Android hệ điều hành thân
thiện và khá phổ biến trên thị trường hiện nay (sự khác biệt chính là thông
số hệ điều hành Thông số càng cao hệ điều hành càng chất lượng)
Hệ thống âm thanh DPS: Bộ xử lý tín hiệu âm thanh cho ra các dãy âm
thanh Biểu thị chất lượng âm thanh mà màn hình có được
1.2 Phân tích tính năng tiện ích của màn hình thông minh.
Màn hình thông minh là một công nghệ mới đang được đưa ra thị trường Chúng là một loại màn hình có thể được điều khiển bằng giọng nói hoặc cử chỉ Chúng có nhiều tính năng làm cho chúng hữu ích hơn màn hình truyền thống
Dưới đây là những tính năng nổi bật của mình hình thông minh trên xe ô
tô cần có để có một cảm giác lái an toàn trên mọi cung đường:
Trang 8lưu thông và nếu có sự biến đổi nào chúng ta sẽ có thể nhận biết và đưa ra hướng khắc phục ngay lập tức, hạn chế tình huống nguy hiểm có thể xảy ra.
Tích hợp camera 360, camera hành trình, camera lùi
Đây là 3 trong số các thiết bị đặc biệt cần thiết Với khả năng hiển thị trên màn hình toàn bộ hình ảnh của quá trình lưu thông của camera hành trình, toàn
bộ các góc độ hình ảnh xung quanh xe đến từ trước sau và hai bên gương chiếu hậu của camera 360 Đảm bảo chúng ta có thể quan sát các góc ngay cả những góc chết mà mắt thường không thể nhìn thấy được
Hình ảnh camera 360
Hiển thị sẽ thay đổi theo góc đánh lái như xi nhan trái phải, tiến lùi Qua
đó chúng ta sẽ quan và phát hiện nay nếu có chướng ngại vật
Camera lùi là loại thiết bị hiệu quả đối với những trường hợp lưu thông đông đúc Hiển thị hình ảnh đằng sau xe sẽ giúp quá trình lùi xe ở những khu đông đông đúc thuận tiện hơn
Điều khiển bằng giọng nói.
Sử dụng giọng nói để ra lệnh điều khiển đóng mở hoặc điều khiển các hoạt động của ứng dụng bên trong màn hình là điểm nổi bật của các dòng màn hình thông minh Đây là tính năng giúp ích rất nhiều cho quá trình lưu thông Quý khách sẽ tối giản được các thao tác, rảnh tay hơn và đảm bảo sự tập trung trong quá trình lái xe
Định vị dẫn đường với tính chính xác cao.
Màn hình thông minh xe ô tô sẽ tích hợp các ứng dụng GPS, Vietmap, Navitel, Google map Đây đều là phần mềm dẫn đường phổ biến và có tính chính xác cao được sử dụng Offline hoặc Online
Với các ứng dụng dẫn đường này quý khách có thể tiện lợi hơn trong vấn đề tìm đường, xác định địa điểm và lộ trình một cách hợp lý nhất Nhờ đó rút ngắn đượcthời gian di chuyển cũng như tránh các tình huống lạc đường khi đang lưu thông Bên cạnh đó khả năng dẫn đường bằng giọng nói cũng là một tính năng đáng được quan tâm
Trang 9 Xem xét các ứng dụng giải trí bên trong màn hình.
Các tiện ích giải trí chính là một trong những yếu tố khiến chúng ta quyết định thay đổi màn hình của nhà sản xuất bằng màn hình thông minh
Các tính năng giải trí, nghe nhạc, xem Youtube, hỗ trợ xem các chương trình truyền hình, tìm hiểu các thông tin qua các trang mạng xã hội là những gì mà các dòng màn hình này tích hợp được
Bên cạnh đó sẽ có một số dòng sản phẩm được tích hợp trình duyệt chạy youtube
ẩn Người dùng có thể vừa mở trình duyệt youtube vừa mở ứng dụng khác trong quá trình lưu thông (đây chính là sự đặc biệt mà ở một số sản phẩm thông minh chưa làm được)
Một số điều cần biết khi lựa chọn màn hình thông minh cho xe ô tô
Giống như các sản phẩm khác, màn hình thông minh cho xe ô tô cũng có rất nhiều loại đến từ các thương hiệu khác nhau, tùy thuộc vào mức giá mà người sử dụng có thể lựa chọn loại màn hình tương ứng Tuy nhiên, nếu là một người dùngthông thái lựa chọn thì chưa chắc người sử dụng đã có thể đưa ra được lựa chọn đúng đắn nhất ngay tại thời điểm đó
Trước khi lựa chọn màn hình chúng ta cần dành thời gian để tham khảo các thông tin cũng như tích góp cho mình một lượng kiến thức vừa đủ Đặc biệt là làm thế nào để lựa chọn được một sản phẩm màn hình vừa ý và chất lượng Người sử dụng có thể tham khảo sơ đồ sau đây:
Lựa chọn dòng sản phẩm có thương hiệu và có chế độ bảo hành uy tín (thời gian bảo hành, chế độ đổi trả)
Tham khảo các video trải nghiệm và lắp đặt dòng màn hình cho dòng
xe mà mình đang sở hữu (Các clip review, các clip thực tế trên
youtube)
Tham khảo bảng giá của các dòng sản phẩm
Khả năng tích hợp các tính năng, tiện ích từ giải trí đến an toàn
Trang 10 Lựa chọn cơ sở lắp đặt màn hình uy tín Sau đó, đến cơ sở để được tư vấn cụ thể và sử dụng sản phẩm thử nghiệm thực tế.
1.3 Mục tiêu xây dựng bài toán.
Với một số khái niệm được nêu ở phần trên với kiến thức được trau dồi trong quá trình làm việc cũng như tinh thần học hỏi về các công nghệ mới như màn hình AR, màn hình HUD, hệ thống giải trí trên ô tô,…Em sẽ đặt ra các mục tiêu dưới đây để thực hiện và mong muốn có thể thương mại hóa sản phẩm này:
Xây dựng tài liệu trải nghiệm người dùng
Xây dựng tài liệu giao diện người dùng
Xây dựng hệ thống giải trí đa phương tiện: Nghe nhạc, xem video
Xây dựng hệ thống điều hòa, kết nối và điều chỉnh được qua điện thoạithông minh
CHƯƠNG II
TỔNG QUAN CÁC CÔNG NGHỆ2.1 Tổng quan ngôn ngữ lập trình hướng đối tượng C++.
2.1.1 Giới thiệu ngôn ngữ.
2.1.1.1 Khái niệm ngôn ngữ lập trình C++
Trang 11 C++ (hay C Plus Plus) là ngôn ngữ lập trình đa năng, được Bjarne
Stroustrup sáng tạo ra, ngôn ngữ này được xem như một phần mở rộng của C
C++ được thiết kế hướng tới việc lập trình máy tính và phần mềm nhúng trên các mạch vi xử lý, chứa các tài nguyên khổng lồ và sở hữu nhiều ưu điểm về hiệu năng hoạt động và tính linh hoạt cao
Hầu hết mọi hoạt động của C++ đều được thực hiện dưới dạng ngôn ngữ biên dịch (Compiler), nên có thể chạy trên đa hệ điều hành
Một điều đặc biệt trong ngôn ngữ C++, nó đã được tổ chứ Tiêu Chuẩn Hóa Quốc Tế (ISO) chuẩn hóa, phiên bản tiêu chuẩn mới nhất đã được ISO công nhận và đánh giá cao vào tháng 12 năm 2017, đó là ISO/IEC 14882:2017
2.1.1.2 Các đặc trưng cơ bản của C++
C++ là một ngôn ngữ tầm trung, bạn hoàn toàn có thể sử dụng nó để phát triển các chương trình bậc thấp hay những chương trình bậc cao, mà vẫn hoạt động tốt trong phần cứng
C++ là ngôn ngữ lập trình hướng đối tượng, sử dụng các Class và Object cùng các khái niệm như tính kế thừa, tính đa hình, tính đóng gói để tạo
ra các chương trình
C++ được tạo ra dựa trên nền tảng ngôn ngữ C, nên nó có hầu hết mọi tínhnăng của C và được bổ sung thêm khái niệm functions trong quá trình thiết kế chương trình
Các chương trình được tạo ra bởi C++ đều có thể chạy được trên các hệ điều hành như Mac OS, Windows, hay một số biến thể của Unix
Lập trình hướng đối tượng ( Object-oriented programming): Lí do cho sự
phổ biến của C++ chính là nó hỗ trợ vô cùng hiệu quả việc lập trình
hướng đối tượng, bao gồm việc trường tựu hóa dữ liệu (data abstraction), đóng gói dữ liệu (data encapsulation ), kế thừa ( inheritance ) và đa hình ( polymorphism ) Những khái niệm này khá phức tạp, nên nếu bạn chưa
hiểu về chúng, đừng lo lắng, chúng ta sẽ lần lượt làm rõ từng khái niệm
trong chuỗi bài về Lập trình hướng đối tượng.
Trang 12 Con trỏ: Ngôn ngữ C/C++ cung cấp cho chúng ta một công cụ vô cùng
tiện lợi là con trỏ (pointer), một con trỏ có nhiệm vụ lưu địa chỉ bộ nhớ
làm giá trị của nó, đồng thời lưu trữ và truy cập dữ liệu từ bộ nhớ Khái niệm về con trỏ khá quan trọng và nó sẽ liên quan rất nhiều đến các môn học khác, nên chúng ta sẽ có một bài viết đầy đủ hơn ở các bài học sau
2.1.1.3 Ứng dụng của ngôn ngữ lập trình C++
Có thể nói, C++ là ngôn ngữ lập trình tốt nhất cho sự lựa chọn thiết kế cácnền tảng games 3D Nó cho phép người dùng tối ưu hóa việc quản lý các tài nguyên, cho ra các sản phẩm chạy mượt mà trên mọi nền tảng mạng.Ngoài ra, C++ còn hỗ trợ quá trình can thiệp sâu vào CPU và phần cứ của mọi loại máy Đây là yếu tố quan trọng khi thiết kế các trò chơi Engines Một số tựa games nổi tiếng có sự "góp mặt" của C++ là World Of
Warcraft, Diablo Series, Dom 3, Team Fortress 2
Trang 13 Ứng dụng có giao diện người dùng (GUI)
Một trong những chương trình được C++ "nhúng tay" tạo ra là các các phần mềm đồ họa được rất nhiều người ưa chuộng, có thể kể đến như Photoshop, Adobe Premier, Image Ready
Trình duyệt web
Một yếu tố quan trọng mà người dùng luôn mong muốn, là tốc độ load nhanh và sự bảo mật thông tin cao trong các chương trình trên trình duyệt.C++ là ngôn ngữ có thể đáp ứng tốt được điều đó
C++ có sự đóng góp trong việc tạo ra các web browsers mã nguồn mở (Moliza Firefox), ứng dụng email Mozilla Thunderbird, đặc biệt là một phần trong trình duyệt nổi tiếng Google Chrome
Trang 14 Phần mềm quản trị cơ sở dữ liệu
Nhờ sở hữu những tính năng nổi bật, mà C và C++ đều được ứng dụng trong hệ quản trị cơ sở dữ liệu MySQL Đây là phần "xương sống" trong nhiều phần mềm của các tập đoàn lớn là Google, YouTube
Trình biên dịch
Trang 15Ngoài sự "góp mặt" trong MySQL, C và C++ còn là ngôn ngữ nền tảng trong quá trình xây dựng và phát triển ngôn ngữ mới là C#, Java, PHP, Verilog
Đặc biệt, C++ còn là ngôn ngữ hỗ trợ các trình biên dịch khác như Apple C++, Bloodshed Dev-C++ và MINGW make
o C++ là ngôn ngữ lập trình trung cấp, vừa bao gồm cả ngôn ngữ cấpcao và ngôn ngữ cấp thấp Việc nắm bắt được các tính năng cũng như cách thức C++ hoạt động như thế nào sẽ làm nền tảng để bạn
có thể làm quen với các ngôn ngữ lập trình cao cấp khác dễ dàng hơn
Khả năng mở rộng
Trang 16o Ưu điểm lớn nhất của C++ là khả năng mở rộng của nó, vì vậy các ứng dụng được phát triển bằng C++, cụ thể như đồ họa thường chiếm dụng nhiều tài nguyên.
Nhanh
o Là ngôn ngữ lập trình kiểu tĩnh, hiệu suất C++ cao hơn so với các ngôn ngữ lập trình kiểu động, vì mã được kiểm tra trước khi chúng được thực thi Mặc dù Java chiếm ưu thế về hiệu suất nhanh, nhưngsuy cho cùng tùy thuộc vào khả năng của nhà phát triển, hiệu suất C++ vẫn có thể nhanh hơn Java
Phù hợp cho người mới làm quen
o C++ cần rất nhiều mã, nghĩa là bạn phải có một đội ngũ các nhà phát triển lớn để mở rộng ứng dụng C++ và đầu tư nhiều thời gian vào đó Thêm nữa là ngôn ngữ lập trình này đòi hỏi nhiều thứ phải thực hiện theo cách thủ công, như vậy điều này sẽ dễ dàng hơn cho các nhà phát triển có ít kinh nghiệm, người mới bắt đầu làm quen trong việc phát hiện và sửa các lỗi trong mã cơ sở
2.1.2 Ứng dụng vào đồ án.
Dễ tiếp cận: Cú pháp của C++ rất dễ để tiếp cận, gần với ngôn ngữ đời
thường và rất tường minh Học sinh - sinh viên khi mới học lập trình khi tiếp cận với C++ phần lớn sẽ cảm thấy đơn giản hơn khi sử dụng C++ làmphương tiện để tiếp nhận các kiến thức về thuật toán
Hiệu năng cực kỳ cao: Đây là ưu thế lớn của C++, đặc biệt là trong lập
trình thi đấu khi các bài toán đều có ràng buộc về thời gian thực thi
chương trình, yêu cầu có một ngôn ngữ hiệu quả về thời gian chạy Đối chiếu với một người bạn của nó là Python, ta sẽ thấy ngay tốc độ chạy củahai ngôn ngữ này là khác biệt, mặc dù Python là một ngôn ngữ có cú pháprất ngắn gọn nhưng tốc độ chạy lại lâu hơn C++
Thư viện hỗ trợ người dùng: Trong C++ có rất nhiều thư viện cung cấp
các hàm dựng sẵn, hỗ trợ người dùng tối đa trong khi lập trình, đặc biệt là các thuật toán và cấu trúc dữ liệu Việc sử dụng thành thạo các thư viện trong C++ sẽ "nối dài khả năng lập trình" của học sinh - sinh viên
Trang 172.2 Tổng quan ngôn ngữ đánh dấu giao diện người dùng QML.
2.2.1 Giới thiệu ngôn ngữ.
Animation) và phức tạp hơn điều khiển (ví dụ: Nút, Thanh trượt, Ngăn kéo, Trình đơn) Các yếu tố này có thể được kết hợp để xây dựng các thành phần có độ phức tạp khác nhau, từ các nút và thanh trượt đơn giản,
để hoàn thành các chương trình hỗ trợ internet
Các phần tử QML có thể được tăng cường bởi JavaScript chuẩn cả nội tuyến và thông qua các tệp js được bao gồm Các phần tử cũng có thể được tích hợp và mở rộng liền mạch bởi các thành phần C ++ bằng cách
sử dụng khung Qt
QML là ngôn ngữ; thời gian chạy JavaScript của nó là công cụ V4 tùy chỉnh, kể từ Qt 5.2; Qt Quick là biểu đồ cảnh 2D và khung giao diện người dùng dựa trên nó Tất cả đều là một phần của mô-đun Khai báo Qt, trong khi công nghệ này không còn được gọi là khai báo Qt nữa
Mã QML và JavaScript có thể được biên dịch thành các mã nhị phân C ++gốc bằng Trình biên dịch nhanh Qt Ngoài ra, còn có định dạng tệp bộ nhớ
Trang 18cache QML lưu trữ động phiên bản đã biên dịch của QML để khởi động nhanh hơn trong lần chạy tiếp theo.
Thuộc tính id
Mỗi đối tượng có thể được cấp một thuộc tính duy nhất đặc biệt gọi là id Việc gán một id cho phép đối tượng được tham chiếu bởi các đối tượng và tập lệnh khác Phần tử Hình chữ nhật đầu tiên bên dưới có id là myRect Phần tử Hình chữ nhật thứ hai xác định chiều rộng của chính nó bằng cách tham chiếu
Trang 19đến myRect.width, có nghĩa là nó sẽ có cùng giá trị chiều rộng với phần tử Hình chữ nhật đầu tiên.
Ràng buộc tài sản (Property Bindings)
Một ràng buộc thuộc tính chỉ định giá trị của một thuộc tính theo cách khai báo Giá trị thuộc tính được cập nhật tự động nếu các thuộc tính hoặc giá trị dữ liệu khác thay đổi, tuân theo mô hình lập trình phản ứng Các ràng buộc thuộc tính được tạo ngầm định trong QML bất cứ khi nào một thuộc tính được gán một biểu thức JavaScript QML sau đây sử dụng hai ràng buộc thuộc tính để kết nối kích thước của hình chữ nhật với kích thước của otherItem
Trạng thái (State)
Trang 20Các trạng thái là một cơ chế để kết hợp các thay đổi đối với các thuộc tính trong một đơn vị ngữ nghĩa Ví dụ, một nút có trạng thái được nhấn và không được nhấn, ứng dụng sổ địa chỉ có thể có trạng thái chỉ đọc và trạng thái chỉnh sửa cho các số liên lạc Mọi phần tử đều có trạng thái cơ sở "ngầm định" Mọi trạng thái khác được mô tả bằng cách liệt kê các thuộc tính và giá trị của các phần tử khác với trạng thái cơ bản.
Ví dụ: Ở trạng thái mặc định, myRect được đặt ở vị trí 0,0 Ở trạng thái "đã di chuyển", nó được đặt ở vị trí 50,50 Nhấp vào trong vùng chuột thay đổi trạng thái từ trạng thái mặc định sang trạng thái "đã di chuyển", do đó di chuyển hình chữ nhật
Trang 21onClicked: myItem.state = 'moved'
}
}
Thay đổi trạng thái có thể được làm động bằng cách sử dụng Chuyển tiếp
Ví dụ: thêm mã này vào phần tử Item ở trên sẽ tạo hoạt ảnh chuyển đổi sang trạng thái "moved":
vector3d đều có thể được làm động
QML hỗ trợ ba dạng hoạt ảnh chính: hoạt ảnh thuộc tính cơ bản, chuyển tiếp và hành vi thuộc tính
Dạng hoạt ảnh đơn giản nhất là PropertyAnimation, có thể tạo hoạt ảnh cho tất cảcác loại thuộc tính được liệt kê ở trên Hoạt ảnh thuộc tính có thể được chỉ định làm nguồn giá trị bằng cú pháp Hoạt ảnh trên thuộc tính Điều này đặc biệt hữu ích cho các hoạt ảnh lặp lại
Ví dụ sau tạo ra hiệu ứng nảy:
Rectangle {
id: rect
Trang 222.2.1.3 Bộ xử lý tín hiệu (Signal handlers)
Trình xử lý tín hiệu là các lệnh gọi lại JavaScript cho phép thực hiện các hành động bắt buộc để phản hồi lại một sự kiện Ví dụ: phần tử MouseArea có các trình xử lý tín hiệu để xử lý việc nhấn, thả và nhấp chuột:
MouseArea {
onPressed: console.log( "mouse button pressed" )
}
2.2.1.4 Công cụ phát triển (Development tools)
Vì QML và JavaScript rất giống nhau nên hầu như tất cả các trình soạn thảo mã hỗ trợ JavaScript sẽ hoạt động Tuy nhiên, hỗ trợ đầy đủ cho tô sáng cú pháp, hoàn thành mã, trợ giúp tích hợp và trình chỉnh sửa WYSIWYG có sẵn trong IDE Qt Creator miễn phí đa nền tảng kể từ phiên bản 2.1 và nhiều IDE khác
Trang 23Tập tin thực thi qml có thể được sử dụng để chạy tệp QML dưới dạng tập lệnh Nếu tệp QML bắt đầu bằng shebang thì nó có thể được thực thi trực tiếp Tuy nhiên, việc đóng gói một ứng dụng để triển khai (đặc biệt là trên nền tảng di động) thường liên quan đến việc viết một trình khởi chạy C ++ đơn giản và đóng gói các tệp QML cần thiết dưới dạng tài nguyên.
2.2.2 Cơ chế Signal & Slot.
2.2.2.1 Khái niệm về Signal.
Signal tiếng Việt có nghĩa là tín hiệu.
Trong Qt, khi một sự kiện nào đó xảy ra, một signal sẽ được phát đi giống như đài truyền hình phát sóng vậy, thực ra nó chỉ là một phương thức của một lớp nhưng không có phần thân hàm {} Các lớp Widget có sẵn trong
Qt có rất nhiều signal được định nghĩa sẵn, và chúng ta cũng có thể viết các signal riêng cho các lớp của chúng ta Signal không có kiểu trả về, kiểu trả về của signal luôn luôn là void
Signal là event cần thông báo còn slot là hàm của một object để xử lý event Signal thì khai báo sau chỉ thị: signals: và không cần viết thân hàm cho nó
2.2.2.2 Khái niệm về Slot
Slot chẳng qua cũng là một phương thức bình thường của một lớp, các phương thức này sẽ được gọi khi có một signal nào đó được phát đi Cũnggiống như signal, các lớp Widget trong Qt cũng có sẵn rất nhiều slot và chúng ta cũng có thể viết slot cho lớp của riêng chúng ta
Slot thì khai báo sau chỉ thị: public slots: và cần viết thân hàm cho nó
Từ Qt5 slot có thể là một hàm bình thường mà không cần khai báo sau chỉthị "public slots:"
2.2.2.3 Những loại kết nối Signal & Slot.
Một signal có thể connect tới nhiều slot
Nhiều signal có thể kết nối tới cùng một slot
Trang 24 Một signal có thể connect tới một signal khác.
2.2.2.4 Tìm hiểu phương thức Connect().
Signal và slot được kết nối qua từng đối tượng (chứ không phải qua từng lớp) Tức là chúng ta chỉ có kết nối đối tượng này với đối tượng kia chứ không kết nối lớp này với lớp kia, giả sử chúng ta có đối tượng object1,
object2 thuộc lớp A và object3 thuộc lớp B thì chúng ta chỉ có thể kết
nối object1->object2, object1->object3 hoặc object3->object2 chứ không kết nối lớp A đến lớp B
Khi kết nối như vậy thì một đối tượng sẽ làm vai trò phát signal, một đối tượng
sẽ nhận signal Đối tượng phát signal có thể phát các signal và cứ mỗi lần phát như vậy thì đối tượng nhận signal tương ứng sẽ thực thi slot của đối tượng đó.Một signal có thể kết nối đến nhiều slot và một slot có thể kết nối đến nhiều signal
Slot sẽ được gọi khi có signal tương ứng được phát ra, nhưng vì slot cũng là một phương thức bình thường như bao phương thức khác nên chúng ta cũng có thể gọi chúng như gọi phương thức bình thường vậy
Tham số của signal phải ít hơn hoặc bằng tham số của slot Khi một signal được phát đi, nó sẽ mang theo dữ liệu là các tham số của nó, và slot nhận signal này sẽ nhận các tham số đó thông qua tham số của nó Thứ tự các tham số của signal và slot phải giống nhau, chẳng hạn như signal gửi 1 int, sau đó là 1 string thì slot cũng phải nhận 1 int rồi mới tới string
Một signal cũng có thể kết nối đến một signal khác, tức là như thế sẽ phát ra 2 signal
Trang 25Ngoài ra nếu muốn bỏ việc kết nối thì đã có Api QObject: Disconnect().
2.2.2.5 Cú pháp cơ bản của Signal & Slot.
Cơ chế Signal & Slot có 2 loại đó là:
Old syntax (Hỗ trợ tất cả các phiên bản của QT):
Qbject::connect(object1, SIGNAL(signalName), object2,
SLOT(slotName))
New syntax (Chỉ hỗ trợ từ phiên bản Qt5): Qoject::connect(object1,
&signalName, object2, &slotName)
Một vài điểm hạn chế của cách viết connect signal/slot theo old syntax:
No compile time check: không thể check được signal, slot đó đã khai báo đúng chưa cũng như các parameters của signal/slot đã matching và hợp lệ
Trang 26chưa Chỉ lúc runtime chương trình mới thông báo là kết nối signal/slot thành công hay không.
Slot thì phải khai báo sau chỉ thị, ví dụ: public slots: mà không thể dùng function pointer như new syntax
Có những điểm hạn chế nếu các parameter là các kiểu dữ liệu được nằm trong namespace hoặc typedef
Những thế mạnh khi dùng connect signal/slot theo new syntax:
Compile time checking- kiểm tra được connect thành công hay không ngay thời điểm compile
Slot có thể là function pointer (một hàm bình thường không cần khai báo sau chỉ thị: public slots)
Sử dụng tốt cả với kiểu dữ liệu chứa namespace hoặc typedef
2.2.3 Hệ thống liên lạc D-Bus.
2.2.3.1 Khái niệm vè D-Bus.
D-Bus là một hệ thống liên lạc giữa các ứng dụng có nguồn gốc rất đa dạng Với hệ thống này, thậm chí có thể gọi các ứng dụng độc quyền (nếu chúng triển khai D-Bus) Nó không đóng vai trò giống như thư viện vì thư viện không phải là một chương trình độc lập và thư viện là một phần của tệp thực thi của người phát triển Ý tưởng D-Bus được lấy cảm hứng từ các đối tượng Windows OLE, COM và ActiveX Các đối tượng Windows COM cung cấp một cách đơn giản để gọi bất kỳ chương trình nào từ chương trình khác, thậm chí có thể nhúng chương trình này vào bên trong một cách trực quan mà không cần sử dụng cùng một ngôn ngữ lập trình D-Bus không đi xa đến vậy nhưng nó cung cấp giao tiếp
mà UNIX thiếu
D-Bus là một cơ chế IPC (giao tiếp giữa các quá trình) giúp các ứng dụng giao tiếp với nhau D-Bus (Desktop Bus) là một IPC đơn giản, được phát triển như một phần của dự án tự do Nó cung cấp một lớp trừu tượng trên các ứng dụng khác nhau để hiển thị các chức năng và khả năng của chúng Nếu nhà phát
Trang 27triển muốn sử dụng một số tính năng của ứng dụng để làm cho một chương trình khác thực hiện một tác vụ cụ thể, nhà phát triển có thể dễ dàng thực hiện nó bằngcách làm cho quá trình D-Bus nhận biết được.
Khi một ứng dụng được thực hiện tuân theo D-Bus thì không cần phải biên dịch lại hoặc nhúng mã vào đó để làm cho nó giao tiếp với các ứng dụng khác Một điều thực sự thú vị về D-Bus là nó giúp các nhà phát triển viết mã cho bất kỳ ứng dụng tuân thủ D-Bus nào bằng ngôn ngữ mà họ lựa chọn Hiện tại, các ràng buộc D-Bus có sẵn cho C / C ++, Glib, Java, Python, Perl, Ruby, v.v
D-Bus là một hệ thống bus tin nhắn, một cách đơn giản để các ứng dụng nói chuyện với nhau, D-Bus cung cấp một hệ thống và một daemon phiên
Daemon hệ thống được khởi chạy ở mức khởi động hệ thống và được sử dụng chủ yếu cho các sự kiện phần cứng, trong khi daemon phiên được khởi chạy khi người dùng đăng nhập vào môi trường máy tính để bàn và nó được sử dụng cho các ứng dụng máy tính để bàn kết nối với nhau
Lưu ý: Nhà phát triển Dbus luôn khuyến nghị sử dụng thư viện ràng buộc DBus, chẳng hạn như dbus-glib hoặc dbus-qt, thay vì sử dụng trực tiếp API DBus, họ nói rằng API DBus chưa được đóng băng và bằng cách sử dụng trực tiếp API này, lập trình viên đang đăng ký vì một số khó khăn, theo ý kiến của cácchuyên gia thì để hiểu rõ ràng bất kỳ thư viện ràng buộc DBus nào, nhà phát triểnnên đi sâu vào lập trình cấp thấp của DBus, hãy nhớ rằng những gì nhà phát triển
sẽ sử dụng ở đây là một phần nhỏ của API DBus
Trang 28tiên, nhà phát triển sẽ phải xem thư viện nào cung cấp chức năng này trong hệ thống, libnotify trong trường hợp này, và sau đó nhà phát triển nên thực hiện một
số ràng buộc để có thể gọi thư viện được lập trình bằng C từ JavaScript Ngoài
ra, hãy tưởng tượng rằng nhà phát triển muốn chạy ứng dụng của mình với một màn hình không sử dụng libnotify cho các thông báo
2.2.3.3 Các đối tượng sử dụng D-Bus.
Nhiều chương trình hơn bạn có thể tưởng tượng sử dụng D-Bus Một số dịch
vụ D-Bus chỉ để nêu tên các ví dụ là:
Trang 29Chúng ta vào tệp pro : Thêm QT += dbus
- Trên máy tính để bàn, một D-Bus
duy nhất cho tất cả người dùng
- Dành riêng cho các dịch vụ hệ
thống, chẳng hạn như các sự kiện cấp
thấp: kết nối mạng, thiết bị USB…
- Trên các hệ thống Linux nhúng, bus
này thường là loại D-Bus duy nhất
- Một phiên bản cho mỗi phiên người
dùng
- Cung cấp các dịch vụ máy tính đểbàn cho các ứng dụng của người dùng
và cho phép tích hợp toàn bộ phiên
Trang 30 Cách 2: Tạo kết nối và xử lý tín hiệu dbus
o QDBusMessage::connect()
Cách 3: Sử dụng dbus để gọi phương thức của quy trình khác
o QDBusMessage::createMethodCall()
Trang 31 Cách 4: Làm cho trình xử lý thích ứng để phục vụ cuộc gọi phương thức dbus từ quy trình khác.
o Tạo file XML
o Chỉnh sửa file pro :
# config dbus adaptor
Trang 32o Triển khai trong file cpp
2.2.3.6 Cách áp dụng tốt nhất.
chờ cho cuộc gọiphương thức:
QDBusMessageresponse =
Tránh sự cố treo máynếu quá trình đích gặp
sự cố
Trang 33QDBusConnection ::
sessionBus () Call (msg,QDBus :: Block, 1000);
nhận tín hiệu từ quátrình khác nếu tín hiệunày được phát ra liên tục(tần số cao - 5 ~ 10 lần
nó có thể làm cho luồng
bị treo
Nếu luồng hàng đợiđược tách ra -> tải côngviệc sẽ giảm và có thểtránh được vấn đề treo
máy
nhất Nếu một dịch vụ
đã được đăng ký, nókhông thể đăng ký cùngmột tên dịch vụ dbus
Ngoại trừ dịch vụ cũ đãđược hủy đăng ký hoặcquá trình dịch vụ đã bịchấm dứt
đăng ký nhiều dịch vụ
dbus
Trang 34độ, cho dù phần mềm đó có giao diện hay không Bạn có thể dùng Qt viết
ra những phần mềm chạy bằng dòng lệnh, hoặc là các ứng dụng console chạy trên server, thậm chí là các web framework,…
Hiện tại Qt Company đã được thành lập (Digia + Qt Project) để thống nhất phát triển cho Qt
Còn về việc Tại sao QT lại được gọi là cross platfom framework bởi vì Qt cung cấp cho chúng ta rất nhiều module có các tính năng khác nhau: QtGui, QtCore, QtNetwork, QtSql, QtMultimedia, etc., chúng ta có thể dùng nó để phát triển các ứng dụng chạy trên các nền tảng phần cứng khácnhau, ví dụ chúng ta có thể dùng môi trường desktop (chip intel) để phát triển các ứng dụng có thể chạy trên được các board mạch ARM
Trang 352.3.2 Lịch sử phát triển của QT.
2.3.2.1 Sự phát triển của QT
Haavard (Nord) và Eirik (Chambe-Eng) gặp nhau tại Học viện Công nghệ
Na Uy ở Trondheim, nơi cả hai đều tốt nghiệp thạc sĩ ngành Khoa học máy tính.
Haavard rất quan tâm đến việc phát triển GUI bởi C++, và bắt đầu công việc vào năm 1990 khi mà ông được một công ty Thụy điển ủy nhiệm cho phát triển một framework C++ GUI Khoảng 2 năm sau đó, Haavard (Nord) và Eirik (Chambe-Eng) đã làm việc với nhau xây dựng một ứng dụng cơ sở dữ liệu cho các hình ảnh siêu âm Hệ thống cần có thể chạy với GUI trên Unix, Macintosh và
Windows Vào một ngày mùa hè năm đó, Haavard và Eirik ra ngoài thư giãn thưởng thức cảnh đẹp, ngồi trên ghế đá công viên tận hưởng ánh nắng mặt trời, khi đó Haavard nói: “Chúng ta cần một hệ thống hiển thị hướng đối tượng” Kết quả của cuộc thảo luận đó đã đặt nền tảng cho một GUI framework đa nền tảng
mà họ sẽ sớm xây dựng tại thời điểm đó Framework đó được đặt tên là Qt, mùa
hè năm 1990 đó đã chính thức cho một quá trình thai nghén của Qt bởi Haavard
và Eirik
2.3.2.2 Sự ra đời của QT
Năm 1991, Haavard đã chính thức bắt đầu viết ra các class mà cuối cùng
nó trở thành Qt cùng với sự hợp tác thiết kế của Eirik
Năm tiếp theo (1992), Eirik đã nảy ra ý tưởng về “signals and slots”, một mô hình lập trình GUI đơn giản nhưng cực kỳ mạnh mẽ và hữu ích thứ mà sau đó được rất nhiều các công cụ khác chấp nhận Haavard đã lấy ý tưởng và triển khai thực hiện một hand-coded
Đến năm 1993, Haavard và Eirik đã phát triển kernel đầu tiên của Qt chi việc phát triển graphics và nó cho phép thực hiện các widgets của riêng họ Cuối năm
đó, Haavard và Eirik đề xuất rằng họ sẽ cùng nhau hợp tác để xây dựng ra C++ GUI framework tốt nhất thế giới
Trang 36Năm 1994 là một sự khởi đầu đầy khó khăn với hai lập trình viên trẻ tuổi mong muốn được bước chân vào thị trường khi không có khách hàng, không có tiền và chỉ có một sản phẩm dang dở May mắn thay cả hai người vợ của họ đều có việc làm và được tuyển dụng, họ là hậu phương cho chồng, hỗ trợ chồng trong 2 năm,khoảng thời gian mà Haavard và Eirik dự kiến sẽ cần để phát triển sản phẩm và bắt đầu có thu nhập từ sản phẩm.
Ngày 4 tháng 3 năm 1994, họ thành lập công ty mang tên là Quasar technologies,sau đó đổi tên là Troll Tech và ngày nay được gọi là Trolltech Sản phẩm của họ được đặt tên là Qt, trong đó chữ ‘Q’ được chọn làm tiền tố vì chữ ‘Q’ trông rất đẹp trong phông chữ Emacs của Haarvad, chữ ‘t’ được chọn để đại diện cho
‘toolkit’, lấy cảm hứng từ Xt một bộ cung cụ X Trolltech ra đời dưới sự quản trịcủa fouders Haavard Nord (CEO) và Eirik Chambe-Eng (President)
Tháng 4 năm 1995, nhờ một mối quan hệ thông qua một trong những giáo sư củatrường đại học của Haavard, Công ty Metis của Na Uy đã ký một hợp đồng phát triển phần mềm dựa trên Qt framework với Trolltech Trong khoảng thời gian này, Trolltech đã thuê Arnt Gulbrandsen người mà đã cống hiến trong suốt 6 nămlàm việc trong Trolltech đã nghĩ ra và thực hiện một hệ thống tài liệu rất tốt cho
Qt và đóng góp lớn cho Qt code
Qt lần đầu tiên ra đời vào tháng 5 năm 1995, được phát triển bởi 2 nhà sáng lậpTrolltech khi đó Cụ thể hơn Trolltech release Qt bản public đầu tiên vào ngày 20tháng 5 năm 1995 dành cho X11/Linux với 2 dạng commercial và open source (FreeQt license) Phiên bản đầu tiên là Qt 0.9 và được tải lên website
sunsite.unc.edu Sáu ngày sau đó bản release đó đã được phát hành trên
comp.os.linux.announce và đây là bản Qt đầu tiên chính thức được phát hành công khai Qt có thể sử dụng phát triển ứng dụng trên cả Window và Unix với hệ thống API trên cả 2 platforms là như nhau
Trang 37Ngay từ version đầu tiên, Qt cung cấp 2 loại giấy phép phát triển:
Commercial license là yêu cầu khi dùng cho phát triển các sản phẩm
commercial
Free software edition sử dụng cho phát triển các ứng dụng open source.
Hợp đồng với Metis tiếp tục được hoạt động giữ cho Trolltech ổn định trong suốt
10 tháng dài không bán được license của bản Qt commercial
Đến tháng 3 năm 1996, Công ty European Space Agency trở thành khách hàng thứ 2 của Qt với 10 commercial licenses được bán Với niềm tin không lay
chuyển, Eirik và Haavard đã tuyển thêm nhân sự Qt 0.97 được phát hành vào cuối tháng 5 và vào ngày 24 tháng 9 năm 1996, Qt 1.0 xuất hiện Đến cuối năm
1996, Qt đã đạt đến phiên bản 1.1 cùng với tám khách hàng ở các quốc gia khác nhau, đã mua 18 license của họ Năm 1996 cũng chứng kiến sự thành lập của dự
án KDE, dẫn đầu bởi Matthias Ettrich
2.3.2.3 Chuẩn mực cho việc phát triển GUI.
Qt 1.2 được phát hành chính thức vào tháng 4 năm 1997 Matthias Ettrich
đã quyết định sử dụng Qt để xây dựng KDE và điều đó đã giúp Qt trở thành một chuẩn mực cho việc phát triển GUI bằng C++ trên Linux Cũng ngay trong 1997, vào tháng 9 Qt 1.3 ra đời
Matthias Ettrich tham gia vào Trolltech năm 1998, đó cũng là năm mà phiên bản cuối cùng của Qt 1 được phát hành Qt 1.4 ra mắt vào tháng 9 năm đó
Qt 2.0 được phát hành vào tháng 6 năm 1999 Qt 2 phát hành kèm với giấy phép mới đó là Opensouce license (Q Public License (QPL)), tuân thủ với các định nghĩa open source Vào tháng 8 năm 1999, Qt đã giành giải thưởng LinuxWorld cho library/tool tốt nhất lúc bấy giờ Trong khoảng thời gian này, Trolltech Pty Ltd (Úc) được thành lập
Trang 38Trolltech phát hành Qtopia Core (sau này gọi là Qt/Embedded) vào năm 2000
Nó được thiết kế dành cho các thiết bị chạy embedded Linux và bản thân cung cấp một hệ thống window riêng giống như một sự thay thế nhẹ cho X11 Cả Qt/X11 và Qtopia Core được cấp theo hai loại giấy phép GPL (GNU General Public License) cũng như commercial license
Cuối năm 2000, Trolltech thành lập Trolltech Inc (USA) và phát hành phiên bản đầu tiên của Qtopia, một nền tảng ứng dụng cho mobile và PDAs Qtopia Core
đã giành được giải thưởng LinuxWorld “Giải pháp tốt nhất cho Embedded
Linux” trong 2 năm liên tiếp 2001 và 2002 Qtopia Phone cũng đạt được danh hiệu tương tự vào năm 2004
Qt 3.0 được ra đời vào năm 2001, lúc bấy giờ Qt tương thích với cả Windows, Mac OS X, Unix và Linux (desktop and embedded) Qt 3 cung cấp thêm 42 classmới và lượng line of code đã vượt qua 500,000 lines Qt 3 là một bước nhảy quantrọng từ Qt 2, nó bao gồm cả việc cải thiện ngôn ngữ và Unicode được hỗ trợ tốt cùng với tiện ích xem và chỉnh sửa văn bản hoàn toàn mới và lớp expression giống như Perl Qt 3 đã giành được giải thưởng Năng suất Jolt năm 2002 của Thời báo Phát triển Phần mềm (Software Development Times)
Mùa hè năm 2005, Qt 4.0 được chính thức phát hành Với khoảng 500 class và hơn 9000 functions, Qt 4 là lớn hơn hẳn cả về lượng và chất hơn tất cả các phiên bản trước đó Nó đã được chia thành nhiều library để các nhà phát triển chỉ cần liên kết với các phần của Qt mà họ cần Qt 4 là một tiến bộ vượt bậc so với các phiên bản trước với các cải tiến bao gồm bộ công cụ chứa mẫu hiệu quả và dễ sử dụng template containers, advanced model/view functionality, khung vẽ 2D nhanh và linh hoạt, các lớp chỉnh sửa và xem văn bản Unicode mạnh mẽ, chưa kểhàng ngàn cải tiến lớn nhỏ trong toàn bộ phạm vi của các lớp Qt Qt 4 là phiên bản Qt đầu tiên có sẵn Qt edition cho cả phát triển commercial và open source trên tất cả các nền tảng mà nó hỗ trợ Cũng trong năm 2005, Trolltech đã mở một
Trang 39văn phòng đại diện tại Bắc Kinh để cung cấp cho khách hàng ở Trung Quốc và khu vực các dịch vụ bán hàng, đào tạo và hỗ trợ kỹ thuật cho Qtopia.
Năm 2006, Trolltech đã đưa Qtopia đến hàng triệu thiết bị trên toàn thế giới, từ Sharp cho đến Motorola.
2.3.2.4 Sứ mệnh phát triển không ngừng.
Kể từ khi Trolltech Khai sinh, mức độ phổ biến của Qt đã tăng lên không ngừng và tiếp tục phát triển cho đến ngày nay Thành công này là sự phản ánh cả
về chất lượng của Qt và mức độ thú vị của việc sử dụng Qt Trong cả thập kỷ, Qt
đã chuyển từ một sản phẩm được sử dụng bởi một vài người đến hàng ngàn khách hàng và hàng chục ngàn nhà phát triển nguồn mở trên toàn thế giới
Vào 28 tháng 1 năm 2008, Tập đoàn Nokia tuyên bố họ ký một thỏa thuận rằng Nokia đã đề nghị công khai mua lại Trolltech để tăng tốc chiến lược phần mềm Tổng số tiền Nokia chi trả cho việc này là 104 triệu euro Vào ngày 5 tháng 6
Trang 40năm 2008 Nokia hoàn tất việc offer mua lại Trolltech, và ngày 17 tháng 6 năm
2008 các thỏa thuận được hoàn tất, Nokia chính thức đã có Trolltech
Ngày 30 tháng 9 năm 2008, Trolltech được đổi tên thành Qt và Qtopia đổi thành
Qt Extended Tháng 11 năm 2009, một lần nữa công ty được đổi tên thành Qt Development Frameworks.
Dưới thời Nokia, Qt đã làm nên tên tuổi của các siêu phẩm đến từ Nokia trên nềntảng Symbian và sử dụng Qt frameworks Những cái tên đáng được nhắc tới như N85, N91 … thuộc N series là một huyền thoại khó quên Tuy nhiên, thi trường
di động đầy rẫy khó khăn, Nokia cũng không phải ngoại lệ Tháng 3 năm 2011 Nokia đã bán commercial licensing business của Qt cho Digia, phần còn lại đượcDigia mua lại vào năm 2012
Tháng 9 năm 2014, Digia thành lập Qt Company, là một công ty con thuộc sử hữu hoàn toàn và dành riêng cho việc phát triển và quản trị của nền tảng Qt (Qt platform) Tháng 5 năm 2016, công ty được được công khai trên NASDAQ với tên QTCOM
Vondafone,… (các thành viên của Tizen Association)
Các hệ điều hành nhúng như: Android/Linux/Windows Embedded