GUI được mã hóa bằng tay so với GUI của nhà thiết kế Qt [đã đóng]


115

Tôi đang dành những ngày nghỉ này để học viết ứng dụng Qt. Tôi đã đọc về Qt Designer chỉ vài giờ trước, điều này khiến tôi tự hỏi: những người viết ứng dụng thế giới thực trong Qt sử dụng gì để thiết kế GUI của họ? Trên thực tế, mọi người thiết kế GUI nói chung như thế nào?

Đầu tiên, tôi thấy rằng viết mã bằng tay đơn giản hơn về mặt khái niệm so với sử dụng Qt Designer, mặc dù đối với GUIs Designer phức tạp có thể có ý nghĩa. Các GUI lớn có thể có bằng cách sử dụng Designer, nhưng theo thời gian, chúng có thể trở nên rất khó quản lý khi độ phức tạp tăng lên (đây chỉ là ý kiến ​​của tôi). Tôi cũng đã tải xuống mã nguồn AmaroK để xem những người đó đang làm gì và nhận thấy nhiều cuộc gọi đến addWidget () và bạn bè, nhưng không có tệp XML nào được tạo bởi Designer (ngoài ra: AmaroK phải là ứng dụng yêu thích của tôi từ trước đến nay bất kỳ nền tảng nào).

Vậy thì đâu là cách "đúng đắn" để tạo GUI? Nhà thiết kế hay mã? Đối với cuộc thảo luận này, chúng ta hãy xem xét các loại GUI sau:

  1. Các hộp thoại đơn giản chỉ cần nhập đầu vào, hiển thị một số kết quả và thoát. Hãy giả sử một ứng dụng lấy URL YouTube và tải video xuống đĩa cứng của người dùng. Loại ứng dụng mà một người mới có thể sẽ bắt đầu.
  2. GUI cấp độ trung cấp chẳng hạn như trình chỉnh sửa ghi chú cố định với một vài mục trên thanh công cụ / menu. Hãy lấy xPad làm ví dụ ( http://getxpad.com/ ). Tôi muốn nói rằng hầu hết các ứng dụng thuộc loại "tiện ích".
  3. GUI rất phức tạp, như AmaroK hoặc OpenOffice. Bạn biết chúng khi bạn nhìn thấy chúng vì chúng làm cho mắt bạn chảy máu.

Câu trả lời:


44

Trải nghiệm của chúng tôi với Designer bắt đầu từ Qt3.

Qt3

Tại thời điểm đó, Designer hữu ích chủ yếu để tạo mã mà sau đó bạn sẽ biên dịch vào ứng dụng của mình. Chúng tôi đã bắt đầu sử dụng cho mục đích đó nhưng với tất cả mã đã tạo, khi bạn chỉnh sửa nó, bạn không thể quay lại và tạo lại nó nữa mà không mất các chỉnh sửa của mình. Cuối cùng, chúng tôi chỉ lấy mã đã tạo và làm mọi thứ bằng tay từ đó đến nay.

Qt4

Qt4 đã được cải thiện đáng kể trên Designer. Nó không chỉ tạo mã nữa mà bạn có thể tải động các tệp Designer của mình (trong xml) và kết nối động chúng với các đối tượng đang chạy trong chương trình của bạn - tuy nhiên, không có mã được tạo, bạn phải đặt tên cho các mục trong Designer và dính với các tên để không phá vỡ mã của bạn.

Đánh giá của tôi là nó không ở đâu hữu ích như Interface Builder trên Mac OS X, nhưng tại thời điểm này, tôi có thể thấy việc sử dụng các tệp Designer trực tiếp trong một chương trình.

Chúng tôi đã không quay lại Designer kể từ Qt3, nhưng vẫn sử dụng nó để tạo nguyên mẫu và gỡ lỗi bố cục.

Đối với các vấn đề của bạn:

  1. Bạn có thể thoát khỏi việc sử dụng các hộp thoại tiêu chuẩn mà Qt cung cấp. QInputDialog hoặc nếu bạn phân lớp QDialog, hãy đảm bảo sử dụng QButtonDialogBox để đảm bảo các nút của bạn có bố cục nền tảng phù hợp.

  2. Bạn có thể làm điều gì đó hạn chế hơn như xPad với chức năng Designer hạn chế.

  3. Tôi sẽ không nghĩ rằng bạn có thể viết một cái gì đó như OpenOffice chỉ với Designer nhưng có lẽ đó không phải là vấn đề.

Tôi muốn sử dụng Designer như một công cụ khác, giống như trình soạn thảo văn bản của bạn. Khi bạn tìm thấy những hạn chế, hãy thử một công cụ khác cho vấn đề mới đó. Tôi hoàn toàn đồng ý với Steve S rằng một lợi thế của Designer là người khác không phải là lập trình viên có thể thực hiện bố cục.


23
Không bao giờ cần phải sửa đổi mã được tạo bởi uic (trình biên dịch tệp .ui). Nếu cần thêm chức năng, hãy tạo một lớp mới kế thừa từ lớp đã tạo hoặc bao gồm nó như một thành viên và thêm mã cần thiết.
Parker Coates

1
Cần lưu ý rằng trong Qt3 và đầu Qt4 (khoảng năm 2008), Qt Designer thiếu một số tính năng mà có thể đã là showstoppers đối với một số người, chẳng hạn như thiếu hỗ trợ cho ButtonGroup, các vị trí tùy chỉnh, đặt tên QLayouts, v.v. Nhưng đối với 5 cuối cùng 6 năm hoặc lâu hơn, tất cả những vấn đề đó đã được giải quyết. Tôi thích sử dụng các tệp giao diện người dùng hơn nếu có thể, việc sắp xếp lại bố cục dễ dàng hơn nhiều và dẫn đến việc duy trì ít mã hơn rất nhiều.
Brendan Abel

42

Theo kinh nghiệm của tôi với Qt Designer và các bộ công cụ / UI-tools khác:

  • Các công cụ giao diện người dùng giúp tăng tốc công việc.
  • Các công cụ giao diện người dùng giúp bạn điều chỉnh bố cục sau này dễ dàng hơn.
  • Các công cụ giao diện người dùng giúp những người không phải lập trình viên làm việc trên thiết kế giao diện người dùng dễ dàng / có thể hơn.

Sự phức tạp thường có thể được giải quyết trong một công cụ UI bằng cách chia nhỏ thiết kế thành nhiều tệp UI. Bao gồm các nhóm thành phần hợp lý nhỏ trong mỗi tệp và coi mỗi nhóm như một tiện ích con duy nhất được sử dụng để xây dựng giao diện người dùng hoàn chỉnh. Khái niệm về các vật dụng được quảng cáo của Qt Designer có thể giúp ích cho việc này.

Tôi không thấy rằng quy mô của dự án tạo ra bất kỳ sự khác biệt nào. Kinh nghiệm của bạn có thể khác nhau.

Các tệp được tạo bằng công cụ giao diện người dùng (tôi đoán bạn có thể viết chúng bằng tay nếu bạn thực sự muốn) thường có thể được tải động tại thời điểm chạy (Qt và GTK + đều cung cấp tính năng này). Điều này có nghĩa là bạn có thể thực hiện các thay đổi bố cục và kiểm tra chúng mà không cần biên dịch lại.

Cuối cùng, tôi nghĩ rằng cả mã thô và công cụ giao diện người dùng đều có thể hiệu quả. Nó có thể phụ thuộc rất nhiều vào môi trường, bộ công cụ / UI-tool, và tất nhiên là sở thích cá nhân. Tôi thích các công cụ giao diện người dùng vì chúng giúp tôi thiết lập và chạy nhanh và cho phép thay đổi dễ dàng sau này.


8

Tổ chức tôi làm việc đã chuyển ứng dụng GUI sang Qt vài năm trước. Tôi nghĩ rằng có một số khía cạnh đáng nói:

  • Làm việc với Qt Designer, ít nhất là tại thời điểm đó, không phải là một lựa chọn thực tế: có quá nhiều tính năng không thể thực hiện được với Qt Designer;
  • Các quy ước và cấu trúc phải được bảo tồn đã ngăn cản việc sử dụng Qt Designer;
  • Khi bạn đã bắt đầu mà không có Designer, có lẽ rất khó để quay lại với nó;
  • Tuy nhiên, khía cạnh quan trọng nhất là các lập trình viên đã rất quen với việc lập trình bằng vi hoặc emac, hơn là sử dụng GUI IDE.

Kinh nghiệm của riêng tôi, nó trở lại khoảng. 4 năm sử dụng Qt3.3, đó là hành vi động trong hộp thoại không thể thực hiện được trong Designer.


8

Chỉ cần nói rằng tôi đã viết và duy trì các GUI phức tạp trong Qt mà không sử dụng Qt Designer - không phải vì tôi không thích Qt Designer, mà bởi vì tôi chưa bao giờ làm việc theo cách đó.

Một phần là vấn đề về phong cách và bạn đến từ đâu: khi tôi bắt đầu sử dụng Qt, tôi đã có những trải nghiệm kinh khủng về Dreamweaver và Frontpage cũng như các công cụ HTML trực quan khác, và thích viết mã bằng HomeSite hơn và sử dụng Photoshop để có bố cục phức tạp các vấn đề.

Có một mối nguy hiểm với IDE mã trực quan mà bạn cố gắng giữ trong các công cụ trực quan, nhưng cuối cùng cũng phải chỉnh sửa mã - theo những cách mà bạn chưa hiểu rõ.

Chẳng hạn, khi học cách phát triển iPhone, tôi đã thấy bực bội khi nhấn vào nội dung trực quan 'ma thuật' ('kéo từ vòng tròn trống trong trình kiểm tra Kết nối đến đối tượng trong cửa sổ Trình tạo giao diện ...') sẽ đơn giản hơn (đối với tôi) để hiểu bằng mã cũ đơn giản.

Chúc may mắn với Qt - đó là một bộ công cụ tuyệt vời, tuy nhiên bạn sử dụng nó và Qt Creator có vẻ như là một IDE tuyệt vời.


7

Tôi muốn nói thêm rằng một trong những lý do để sử dụng trình thiết kế đồ họa là thiếu trình quản lý bố cục trong Win32. Chỉ có thể định vị tuyệt đối, và làm điều đó bằng tay sẽ rất tệ.

Kể từ khi tôi chuyển từ Delphi sang Java cho các ứng dụng GUI (trở lại năm 2002), tôi chưa bao giờ sử dụng các nhà thiết kế nữa. Tôi thích người quản lý bố trí hơn nhiều. Và đúng vậy, bạn nhận được mã boilerplate, nhưng việc di chuyển các đối tượng trên trình thiết kế giao diện người dùng có thể mất nhiều thời gian như việc thay đổi boilerplate. Thêm vào đó, tôi sẽ bị mắc kẹt với IDE chậm; đó là đối với trường hợp Java / C #, OK, trong khi đối với Qt (đặc biệt là Qt4) thì không áp dụng. Đối với Qt3, tôi tự hỏi tại sao người ta nên chỉnh sửa mã đã tạo - không thể thêm mã vào các tệp khác? Vì lý do gì?

Về các trường hợp đã thảo luận: 1) GUI được mã hóa bằng tay có khả năng viết nhanh hơn, ít nhất là nếu bạn biết các thư viện của mình. Nếu bạn là người mới và bạn không biết chúng, bạn có thể tiết kiệm thời gian và học ít hơn với một nhà thiết kế, vì bạn không cần phải học các API bạn sử dụng. Nhưng "học ít hơn" là yếu tố chính, vì vậy trong cả hai trường hợp, tôi sẽ nói GUI được mã hóa bằng tay.

2) Các thanh menu khá khó chịu để viết mã. Ngoài ra, hãy nghĩ đến các chi tiết như máy gia tốc, v.v. Tuy nhiên, nó phụ thuộc vào những gì bạn đã sử dụng. Sau một thời gian, việc gõ bảng soạn sẵn đó có thể nhanh hơn là trỏ và nhấp chuột vào trình thiết kế để sửa tất cả các thuộc tính đó, nhưng chỉ cần bạn thực sự có thể nhập giống như một máy đánh chữ (như những quản trị viên đó để gõ lệnh Unix nhanh hơn sử dụng bất kỳ GUI nào).

3) Tôi sẽ mở rộng câu trả lời cho trường hợp số 2 cho trường hợp này. Lưu ý rằng, đối với nền tảng Win32, có thể việc sử dụng các nhà thiết kế tạo tài nguyên Win32 có thể tải nhanh hơn (không có ý kiến ​​về điều đó).

Tuy nhiên, tôi muốn đề cập đến một vấn đề tiềm ẩn với việc sử dụng Qt Designer ở đó. Trường hợp thực tế: mất vài giây (giả sử 10) để tải một hộp thoại Java phức tạp (hộp thoại Tùy chọn cho trình soạn thảo văn bản của lập trình viên) với rất nhiều tùy chọn. Cách khắc phục chính xác sẽ là chỉ tải từng tab khi lập trình viên muốn xem chúng (tôi đã nhận ra điều đó sau đó), bằng cách thêm một phương thức riêng biệt vào từng bộ tùy chọn để xây dựng GUI của nó.

Nếu bạn thiết kế tất cả các tab và trình chuyển đổi tab cùng với một nhà thiết kế, bạn có thể làm điều đó dễ dàng không? Tôi đoán có thể có một ví dụ tương tự trong đó GUI được mã hóa bằng tay mang lại cho bạn sự linh hoạt hơn và trong một ứng dụng lớn như vậy, bạn có thể cần điều đó, ngay cả khi chỉ cho mục đích tối ưu hóa.


5
Trình quản lý bố cục không loại trừ lẫn nhau với các nhà thiết kế GUI. Trên thực tế, bất kỳ nhà thiết kế GUI nào không sử dụng khái niệm trình quản lý bố cục nào đó còn tệ hơn là vô dụng đối với công việc trên 99% các ứng dụng GUI hiện đại.
Steve S

7

Một trong những lợi ích chính của việc sử dụng trình thiết kế để tạo GUI là các lập trình viên khác có thể thay đổi hoặc duy trì các biểu mẫu và tiện ích con một cách dễ dàng mà không cần phải đi sâu vào một đoạn mã phức tạp.


5

Thật kỳ lạ khi bạn đang nói mã viết đơn giản hơn thao tác với các đối tượng trong môi trường đồ họa. Không có trí tuệ.
Nhà thiết kế ở đó để làm cho cuộc sống của bạn dễ dàng hơn và về lâu dài, nó làm cho mã của bạn dễ bảo trì hơn. Việc tìm kiếm trong trình thiết kế sẽ dễ dàng hơn để xem giao diện người dùng của bạn trông như thế nào, sau đó đọc mã và cố gắng tưởng tượng nó trông như thế nào.
Với Qt hiện tại, bạn có thể làm hầu hết mọi thứ từ bên trong trình thiết kế và rất ít điều bạn không thể làm, bạn có thể sửa chữa với rất ít dòng mã trong trình xây dựng. Lấy ví dụ đơn giản nhất - thêm kết nối khe cắm tín hiệu. Sử dụng trình thiết kế đơn giản như một cú nhấp đúp chuột. Nếu không có trình thiết kế, bạn cần phải tra cứu chữ ký chính xác của tín hiệu, chỉnh sửa tệp .h và sau đó chỉnh sửa, viết mã của bạn trong tệp .cpp. Nhà thiết kế cho phép bạn ở trên những chi tiết này và tập trung vào những gì thực sự quan trọng - chức năng của ứng dụng của bạn.


3
Vâng, nó đã thay đổi cho tôi nhưng kể từ khoảng vài năm trước, khi tôi đã sử dụng Qt hơn 1 năm, tôi nhận ra rằng tôi có thể làm các tác phẩm ui nhanh hơn bằng cách viết tay hơn là bằng cách thiết kế đồ họa. Một điều còn thiếu trong ui viết tay được mã hóa là không thể dễ dàng nhìn thấy nó trông như thế nào cho đến khi nó được thực thi trên màn hình (và đôi khi nó là khía cạnh quan trọng của các tác phẩm hợp tác).
Joonhwan 21/10/12

1
Giống như cô ấy, tôi không thể dung thứ cho các nhà thiết kế, viết bằng tay mạnh hơn và nhanh hơn nhiều đối với tôi, điều này là do ban đầu tôi sử dụng máy mac rất chậm, hầu như không xử lý được thao tác kéo và thả, và sau một vài năm, nó trở thành cách duy nhất Tôi có thể làm thiết kế :) Về không thể được nhìn thấy, tốt sau một năm tôi không cần phải thực hiện nó, tất cả đã được ánh xạ trong lớp trí tưởng tượng của tôi.
ColdSteel

4

Trước tiên, tôi muốn chuyển sang nhà thiết kế để phát triển các tiện ích GUI. Như đã đề cập trong các bài viết khác, nó nhanh hơn. Bạn cũng nhận được phản hồi ngay lập tức để xem nó có "ổn" và không gây nhầm lẫn cho người dùng hay không. Trình thiết kế là lý do chính khiến tôi chọn Qt hơn các bộ công cụ khác. Tôi chủ yếu sử dụng trình thiết kế để tạo các hộp thoại một lần.

Phải nói rằng, tôi làm cửa sổ chính và bất kỳ widget phức tạp nào bằng tay. Tôi nghĩ đây là cách mà Trolltech dự định. QFormLayout là một lớp mà họ cung cấp để dễ dàng lập trình một hộp thoại đầu vào.

Nhân tiện, trình thiết kế trong Qt 4 không phải là một IDE như họ có trong Qt 3. Nó chỉ là một trình soạn thảo để chỉnh sửa các tệp .ui. Tôi thích nó theo cách đó. IDE nền tảng chéo mới sẽ được gọi là Qt Creator.


4

Đó là một bài viết cũ nhưng tôi khuyên bạn nên xem Clementine - một máy nghe nhạc (tôi nghĩ) bắt nguồn từ Amarok. Họ sử dụng Qt4 và từ những gì tôi có thể thấy có một thư mục ui trong thư mục src của dự án. Trong thư mục ui như người ta có thể mong đợi, chúng có tất cả các loại tệp .ui. Nếu bạn biên dịch và khởi động Clementine, bạn sẽ thấy rằng GUI khá phức tạp và khá đẹp.


3

Đối với tôi, nó phụ thuộc vào mức độ logic được đóng gói trong widget / GUI. Nếu nó chỉ là về các biểu mẫu đơn giản, tôi thích sử dụng QtDesigner hơn.

Nếu nó chứa các kiểm tra hoặc tương tác phức tạp, tôi có xu hướng lập trình nó.


Tôi có một số hộp thoại cửa sổ trong ứng dụng MFC đều rất giống nhau. Gần đây, tôi đã thử chỉ đặt tất cả các điều khiển trên một hộp thoại duy nhất và ẩn và định vị lại một số điều khiển nhất định dựa trên chế độ hiện tại của ứng dụng. Bạn đang nói trong Qt bạn có thể dễ dàng xây dựng các điều khiển theo chương trình? Tôi đã tự hỏi liệu điều đó có dễ dàng hơn trong trường hợp của tôi không Rất muốn được nghe những suy nghĩ của bạn.
mitch

Mitch, có trong Qt, bạn có thể xây dựng các điều khiển theo chương trình và nó RẤT dễ dàng. Ngoài ra Qt sử dụng bố cục động và điều này có nghĩa là hộp thoại của bạn trông vẫn đẹp và có thể sử dụng được cho dù bạn thêm một hộp kiểm hay hai mươi hộp.
George Y.

2

Chúng tôi đang sử dụng Qt Designer nếu có ai cần tạo Gui.
Vấn đề là chỉ tạo ra các Widget nhỏ cho các tác vụ nhất định (giống như bạn làm trong thiết kế lớp) và sau đó tập hợp chúng lại thành một "cha-mẹ".

Bằng cách này, các vật dụng của bạn có khả năng tái sử dụng cao và có thể được sử dụng cho Guis theo cách mô-đun. Bạn chỉ cần chỉ định những tín hiệu mà mỗi Widget đang gửi và những vị trí mà chúng cung cấp.

Ngoài ra, chúng tôi cũng đang tạo .ui-Files có thể được tạo trong quá trình xây dựng. Cho đến bây giờ không cần phải chỉnh sửa các tệp đó bằng tay.


0

Xây dựng các phần khác nhau của giao diện người dùng của bạn
trong các tệp .ui khác nhau bằng QtDesigner,
sau đó kết hợp chúng lại với nhau (và thêm các biến chứng) trong mã.

Có những điều bạn không thể làm trong Qt Designer, bạn chỉ có thể làm trong mã,
vì vậy Qt Designer chỉ là một phần (tuyệt vời) của chuỗi công cụ .


Oh chính xác như @MOnsDaR nói
dave
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.