2014-04-23 17 views
7

Tôi đã làm lập trình điều khiển trong một vài năm, và bây giờ là lúc tôi đã học được một chút về thế giới hấp dẫn của GUI. Tôi đã dabbled một chút trong wxWidgets; đã biên soạn một chương trình Hello World, chơi với nó một chút, v.v.Sự khác nhau giữa X-Windows, wxWidgets, GTK/Qt và OpenGL là gì?

Bây giờ tôi là một trong những người có "lời nguyền cấp thấp": Tôi không hài lòng với việc biết cách sử dụng cái gì đó tốt hiệu ứng - Tôi muốn biết những gì đang xảy ra dưới mui xe, ngay cả khi nó có ít hoặc không có giá trị thực tế.

Vì vậy, tôi đã đọc về chủ đề này (ví dụ: here), nhưng tôi cảm thấy khó khăn để bao quanh đầu tất cả các hệ thống khác nhau, bộ công cụ và những gì họ làm. Cho đến nay tôi đã tìm ra điều đó (hãy sửa tôi nếu tôi sai):

  • Bản thân Linux là "chỉ" hạt nhân; nó không cung cấp hỗ trợ GUI (?).
  • Hệ thống Cửa sổ X là cơ sở của GUI trên hầu hết các hệ thống giống UNIX.
  • GTK là bộ công cụ GUI, Qt chứa bộ công cụ GUI. GTK và Qt ở cùng một mức "" (?).
  • Gnome là môi trường máy tính để bàn được xây dựng trên GTK, KDE được xây dựng trên Qt.
  • wxWidgets là thư viện bao bọc xung quanh (?) Các bộ công cụ cấp thấp hơn, như GTK, do đó cung cấp các lợi ích đa nền tảng.
  • OpenGL là API để hiển thị đồ họa véc tơ 2 và 3-D.

Bây giờ cho một số câu hỏi: gắn bó với hệ thống UNIX-like:

  1. Ai đang ở dưới cùng của nó tất cả ?, ví dụ mà thành phần làm cho bitmap mà cuối cùng sẽ được hiển thị trên màn hình?
  2. Điều này có được thực hiện thông qua OpenGL không? Nếu có, ai gọi OpenGL? Và làm thế nào nó được thực hiện trên máy tính cũ mà không có card đồ họa?
  3. Nếu bạn muốn là thực sự là bướng bỉnh, bạn có thể đi bao xa? API nguyên thủy nhất mà bạn có thể lập trình GUI là gì? X11? OpenGL? (xin đừng nói cổng logic :)).

Để nhận tiền thưởng, có thể về hệ điều hành Windows thì sao? Liệu nó có làm theo cấu trúc tương tự chút nào hay nó hoàn toàn theo cách riêng của nó?

+2

Loại câu hỏi này phù hợp hơn tại http://programmers.stackexchange.com/ – RobbieE

+0

Kính gửi @mga: Tôi khiêm nhường đề xuất bạn đổi tên tiêu đề của câu hỏi thành "Sự khác biệt giữa X-Windows, wxWidgets, GTK/Qt và OpenGL? " Bằng cách đó, câu hỏi có thể được tìm thấy và sử dụng cho người khác. –

+0

Tôi đồng ý với RobbieE. Ngoài ra, nó là quá rộng. – lpapp

Trả lời

7
  1. Máy chủ X, giải thích rằng bản thân sẽ mất hơn 10k từ. Không thích hợp cho câu trả lời SO. Đọc mã và để mắt bạn phát nổ. Bare X được áp dụng cho hiển thị phần mềm. OpenGL có thể được sử dụng theo hai cách khác nhau trong ngữ cảnh đó (xem hình bên dưới).

  2. No. Điều này phụ thuộc vào X. X chỉ là một thư viện khác có thể triển khai bản vẽ nguyên thủy của nó theo mong muốn của nhà phát triển. Nhưng X chính nó là một con thú cực kỳ phức tạp với số lượng vô hạn của phần mở rộng mà làm cho chức năng X ngày nay như nó (không có sẽ không có hỗ trợ OpenGL, chỉ là một ví dụ, không có xrandr).

  3. Tùy thuộc vào mức độ đau đớn mà bạn sẵn sàng thực hiện. Bạn chắc chắn có thể vẽ X nguyên thủy hoặc OpenGL nguyên thủy trên màn hình của bạn, nhưng nó không phải là những năm 80 nữa.

Gtk +/Qt trừu tượng hóa API cụ thể của hệ điều hành (X/Wayland/W *) để giảm bớt nỗi đau khi tạo GUI và giảm số lượng mã cần viết. Những bản tóm tắt này có độ phức tạp cao và hàng ngàn dòng mã (chỉ cần có một cái nhìn tại GtkTreeView Klass mà Gtk + cung cấp). Vì vậy, thay vì vẽ pixel, bạn có thể chỉ cần xác định các nút và bố cục và đóng gói các widget.


Vì vậy, từ bài viết wiki này bạn có thể có được một cái nhìn tổng quan cơ bản của chỉ GLX extension đến proto X:

GLX

Cũng có một cái nhìn tại tổng quan về cách vẽ được thực hiện với X

Được cảnh báo rằng điều này hy vọng sẽ lỗi thời sau một vài năm kể từ bây giờ, nếu wayland và Mir khởi động. Đó là những câu chuyện hoàn toàn khác nhau để kể.

Các vấn đề liên quan