Ai đó có thể giải thích cách GUI hoạt động và khi nào tôi nên bắt đầu sử dụng GUI không? [đóng cửa]


16

Tôi đã học C ++ khoảng một tháng nay và trước khi tôi tiến xa hơn, tôi muốn làm rõ câu hỏi tẻ nhạt này mà tôi vẫn tiếp tục. Tôi biết GUI là gì, nhưng tôi không thực sự biết nó hoạt động như thế nào và có thể là ví dụ về những cái phổ biến?

Mặc dù tôi biết lập trình dòng lệnh là các nguyên tắc cơ bản trần trụi, tôi nghĩ rằng nó sẽ rất vui khi làm rối tung GUI.

Mặc dù tôi có khoảng 3 triệu câu hỏi khác, tôi sẽ lưu chúng: D


1
dòng cuối cùng làm tôi mỉm cười :) +1 cho điều đó
DETUS

Câu trả lời:


28

Tôi đang khái quát hóa qua một vài thư viện GUI nhưng ở mức độ rất cao, khái niệm quan trọng nhất mà bạn cần hiểu là GUI được điều khiển theo sự kiện .

Trong một ứng dụng giao diện điều khiển, đầu vào người dùng của bạn thường xảy ra tại một số điểm nhất định mà bạn đã xác định. Bạn nhắc người dùng của bạn, bạn đợi đầu vào của anh ta, bạn tính toán một cái gì đó dựa trên đầu vào đó. Một trong những khác biệt chính là đầu vào chỉ xảy ra ở một nơi, bạn đang đọc văn bản từ dòng lệnh ( stdintrong C ++).

Trong một ứng dụng GUI, bạn thường có nhiều vị trí có thể xảy ra đầu vào, ví dụ các nút thực hiện các hành động hoặc trường văn bản khác nhau. Đây là nơi các sự kiện diễn ra. Ví dụ, nhấp vào nút kích hoạt một sự kiện. Sự kiện này cần được xử lý bởi một bộ xử lý sự kiện , thường chỉ là một phương thức lấy một đối tượng sự kiện và được gọi khi một số chẵn như vậy được kích hoạt. Làm thế nào để nút của bạn biết về xử lý sự kiện? Bạn thường đăng ký (hoặc nghe nó).

Dưới đây là một ví dụ "lấy cảm hứng từ C ++", đây không phải là mã QT hoặc C ++ thực tế.

class MyClickHandler : public ClickListener{
   void clickHandler(ClickEvent e){
      showAlertBox("The button "+e.getSource().getName()+" has been clicked"); 
   }
};

Khi bạn tạo Nút, bạn đăng ký phiên bản của lớp MyClickHandler dựa vào nút.

...
MyClickHandler handler();
Button b("Save");
b.registerListener(handler);
...

Bây giờ mỗi khi Nút bđược nhấp, một hộp thông báo sẽ hiển thị "Nút Lưu đã được nhấp".

Bạn có thể tưởng tượng một ứng dụng GUI có hai giai đoạn:

  • Thiết lập GUI: Một khoảng thời gian ngắn khi khởi động, trong đó tất cả các đối tượng được tạo và kết nối với nhau.
  • Các vòng lặp sự kiện : GUI của bạn là trong một lớn trong khi vòng lặp và chỉ được ngồi đó chạy không tải cho đến khi một sự kiện được kích hoạt.

Đây là một ví dụ rất đơn giản, nhưng tôi muốn giới thiệu với bất kỳ khung nào bạn chọn, hãy thử hiển thị hộp thông báo khi nhấp vào nút.

Đối với khuôn khổ, có rất nhiều trong số họ ngoài kia: Trong trường hợp của C ++, tôi có thể muốn giới thiệu Qt.

Một lời khuyên cuối cùng: Tránh xa các nhà thiết kế GUI cho đến khi bạn thực sự biết những gì đang xảy ra trong nền. Không khó để viết một số ví dụ đơn giản và để hiểu vòng lặp sự kiện trước và sau đó chuyển sang bố cục phức tạp hơn.


Nếu bạn thêm dấu chấm phẩy vào cuối định nghĩa lớp và đặt công khai kế thừa, đó sẽ là cú pháp C ++ thích hợp / có thể.
Lstor

1
Làm xong. Nhưng tôi không muốn đưa ra bất kỳ kỳ vọng sai lầm nào, vì mã cuối cùng sẽ không thể chạy được. Hầu hết kinh nghiệm của tôi là trong Swing mà có lẽ phản ánh trong các tên lớp. Các khái niệm tương tự sẽ được gọi khác nhau trong các khung khác nhau.
sebastiangeiger

1
+1 Đây dường như là câu trả lời duy nhất trả lời câu hỏi (đối với tôi có vẻ như anh ta không chỉ hỏi về khung, anh ta hỏi về các khái niệm chung)
Federico klez Culloca

1
Ewwww .... người nghe xấu xí tào lao.
DeadMG

7

Bây giờ là thời gian tốt hơn bao giờ hết để học lập trình GUI. Như bạn đã biết C ++, tôi khuyên bạn nên xem xét QT. Tài liệu tuyệt vời, cơ sở người dùng khổng lồ và rất nhiều ví dụ / hướng dẫn có sẵn để học hỏi.


1
+1 cho Qt - @David - Qt có môi trường phát triển riêng gọi là Qt Creator, khép kín, miễn phí và tương đối đơn giản so với những người khác. Qt mạnh mẽ, trực quan, bao quát, tài liệu rất tốt và có lượng người dùng lớn và tích cực. Thật dễ dàng để bắt đầu và có rất nhiều ví dụ để bắt đầu chơi và làm việc của riêng bạn - đó là một cách tuyệt vời để học bằng cách này. Nó có thể được tải xuống ở đây
Roger Attrill

Tôi có xu hướng downvote này. QT khuyến khích rất nhiều thực tiễn tồi tệ trong C ++ nếu bạn không biết nên chú ý điều gì. - Mà bạn không, chỉ sau một tháng C ++. Hơn nữa, nó chạm vào một số khía cạnh phức tạp trong C ++. Nếu có thể, tôi sẽ bắt đầu lập trình GUI bằng một ngôn ngữ khác trước và tập trung vào việc làm đúng C ++.
Konrad Rudolph

3

Bạn cũng có thể bắt đầu với Microsoft Visual Studio C ++ Express . IDE rất thân thiện và dễ sử dụng (và miễn phí!), Và bạn sẽ có thể tạo các ứng dụng GUI đầu tiên của mình rất nhanh ... Điều này sẽ giúp bạn tập trung tìm hiểu những điều cơ bản về lập trình hướng sự kiện , một cách tiếp cận khác mà bạn sẽ cần phải thành thạo.

Bạn cũng có thể trực tiếp bắt đầu với việc xây dựng các ứng dụng điều khiển WPF, nhưng ban đầu tôi sẽ bắt đầu với Windows Forms, đó là một công nghệ ít nắm bắt hơn vì nó chỉ là C ++ cơ bản với API Windows Forms của Microsoft.


1
Trong VC ++ Express, bạn có thể viết GUI bằng: 1. API Win32 rất cũ, cồng kềnh và thật lố bịch 2. MFC là đống rác cũ 3. WTL tốt hơn nhưng không đa nền tảng. 4. C ++ / CLI không phổ biến, được hỗ trợ kém (thậm chí không có nội dung) và quá phức tạp. Qt dễ dàng hơn, đa nền tảng, có trình thiết kế GUI đẹp và có số lượng lớn các lớp không phải GUI hữu ích, điều này rất quan trọng trong C ++ với thư viện tiêu chuẩn nhỏ.
Anton Barkovsky

0

Có lẽ phù hợp hơn với StackOverflow, được gắn thẻ c ++; nhưng dù sao.

Nhìn một vài trong số này lên google; Qt, WxWidgets, WinApi của TheForgers, Fltk ...

GUI không khó sử dụng, nhất là khi bạn đã biết c ++. Đi với WxWidgets tôi nghĩ; Qt là một chút quá phức tạp cho việc học tập trong một tháng. Bạn có thể nhận Wx trong một vài giờ.


-1

Người dùng không thích những thứ phức tạp. Bảng điều khiển là một điều phức tạp, đó là lý do tại sao bạn phải tạo các ứng dụng GUI thân thiện và dễ hiểu hơn. Đây là lý do rõ ràng nhất mà tôi thấy. Bạn có thể xem gtk hoặc Qt - hai cái đó là những cái phổ biến nhất.


2
CLI không phức tạp và theo định nghĩa của GUI thì phức tạp hơn đối với người dùng. Họ dễ tiếp cận hơn không ít phức tạp.
Ominus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.