Học C ++ thông qua Khung Qt có thực sự học C ++ [đã đóng]


32

Vấn đề tôi gặp phải là hầu hết các cuốn sách C ++ mà tôi đọc đều dành gần như mãi mãi cho cú pháp và những điều cơ bản của ngôn ngữ, ví dụ forvà các vòng lặp while, mảng, danh sách, con trỏ, v.v.

Nhưng dường như họ không bao giờ xây dựng bất cứ thứ gì đủ đơn giản để sử dụng cho việc học, nhưng đủ thực tế để giúp bạn hiểu triết lý và sức mạnh của ngôn ngữ.

Sau đó, tôi tình cờ thấy QT là một thư viện tuyệt vời!

Nhưng làm việc thông qua các bản demo họ có, có vẻ như tôi đang ở trong tình trạng khó xử ngược lại. Tôi cảm thấy như con trai của người đàn ông giàu lái xe trong một chiếc xe thể thao được cha trợ cấp. Giống như tôi có thể xây dựng phần mềm tuyệt vời, nhưng không biết những gì đang diễn ra dưới mui xe.

Như một ví dụ về tình trạng tiến thoái lưỡng nan của tôi, nhận nhiệm vụ xây dựng một trình duyệt web đơn giản. Trong C ++ thuần túy, tôi thậm chí sẽ không biết bắt đầu từ đâu, nhưng với thư viện Qt, nó có thể được thực hiện trong một vài dòng trên mã.

Tôi không phàn nàn về điều này. Tôi chỉ tự hỏi làm thế nào để lấp đầy khoảng trống kiến ​​thức giữa cấu trúc cơ bản của ngôn ngữ và giao diện cấp cao mà khung Qt cung cấp?


Tôi không quen với lập trình trong Qt. Nó thực sự giới thiệu bất kỳ cú pháp mới hoặc thay đổi ngôn ngữ, hoặc nó chỉ là một số thư viện rất tinh vi?
Thất vọngWithFormsDesigner

@FrustratedWithFormsDesigner Không phải QT là GUI GUI qt.nokia.com nếu bạn quan tâm
Karlson

Qt cũng cung cấp một giải pháp thay thế cho các lớp và thùng chứa tiêu chuẩn (ví dụ QString, QList, v.v.) và rất nhiều phương tiện khác. Một số trong số chúng tôi thấy thậm chí trực quan hơn so với những người tiêu chuẩn. Tôi nghĩ đó là một môi trường lập trình tốt, nhưng tôi khuyên bạn nên học ngôn ngữ C ++ cốt lõi một cách riêng biệt.
Giorgio

3
Nếu bạn muốn tìm hiểu cách Qt được thực hiện, chỉ cần tải xuống và xem mã nguồn của nó.
dùng16764

1
@Karlson Qt không thêm một số thứ vào ngôn ngữ, do đó cần có trình biên dịch metocbject moc aka. Điều này thêm một số phản ánh và tạo thành cơ sở của hệ thống tín hiệu / khe cắm của Qt.
Tamás Szelei

Câu trả lời:


11

Bạn có muốn biết làm thế nào bước lên chân ga làm cho xe đi nhanh hơn, hay bạn chỉ quan tâm rằng đạp lên chân ga làm cho xe đi nhanh hơn?

Bạn đang thấy lợi ích của lập trình hộp đen, đó là một cách tuyệt vời để thiết kế một hệ thống khi tất cả các hộp hoạt động. Ai đó phải tạo ra các hộp đen và nếu bạn muốn trở thành anh chàng / cô gái đó thì bạn cần biết nhiều về ngôn ngữ hơn là anh chàng sử dụng hộp.

Có những công việc là những công việc tốt trong từng phong cách, vì vậy nó tùy thuộc vào bạn những gì bạn muốn lập trình. IMO bạn sẽ tự làm cho mình một sự bất đồng mặc dù nếu bạn không nỗ lực để lấy lại một số trừu tượng mà QT mang lại cho bạn cuối cùng.


2
"IMO bạn sẽ tự làm cho mình một sự bất đồng mặc dù nếu bạn không nỗ lực để lấy lại một số trừu tượng mà QT đang mang lại cho bạn cuối cùng." Quyền của bạn và đó là cảm giác ruột
thịt

18

Điều thiệt hại nhất mà bạn sẽ gây ra cho chính mình, nếu bạn muốn nói theo cách đó, là bạn sẽ không học cách sử dụng các cấu trúc dữ liệu, trình lặp, thuật toán và chuỗi tiêu chuẩn C ++. Qt có các thư viện riêng cho tất cả các mục đích đó và bạn buộc phải sử dụng chúng thay vì các thực thể C ++ tiêu chuẩn vì API Qt chỉ chấp nhận cấu trúc dữ liệu của riêng nó.

Người ta có thể lập luận rằng học cách sử dụng một thư viện thuật toán sau khi thành thạo khác là một nhiệm vụ tầm thường. Trước khi đi đến một cuộc phỏng vấn nơi những người phỏng vấn mong đợi bạn thành thạo C ++, hãy chắc chắn rằng bạn đã đối phó với sự tầm thường đó trước đó.


3
Đồng ý - Qt sử dụng một bộ công cụ hoàn toàn khác với Standard C ++.
DeadMG

Trong công ty của chúng tôi đã có một cuộc tranh luận dài về việc liệu người ta nên sử dụng các thùng chứa và bộ lặp tiêu chuẩn hay các bộ lặp Qt và chúng tôi chưa đưa ra một giải pháp nào: chúng tôi đã kết thúc việc sử dụng cả hai, mặc dù chúng tôi không kết hợp hai phong cách trong một mô-đun đã cho. Tôi có cảm giác rằng việc chuyển từ Qt sang tiêu chuẩn về mặt khái niệm rất dễ dàng, mặc dù sẽ mất một thời gian.
Giorgio

9
Tôi sử dụng các thùng chứa và thuật toán tiêu chuẩn bên trong các mô hình kỹ thuật của mình - tức là logic kinh doanh của tôi. Tôi sử dụng các thùng chứa Qt bên trong mã GUI của tôi. Bằng cách này, các mô hình kỹ thuật của tôi được bảo vệ chống lại những thay đổi trong Qt và ngược lại. Qt có cách kết nối các container tiêu chuẩn và các container của chúng.
emsr

2
Dù sao thì tôi cũng không quan tâm lắm đến container. Chúng không phải là phần hữu ích nhất của STL; các thuật toán quan trọng hơn nhiều. Do thiết kế của STL, các thuật toán của nó có thể dễ dàng làm việc với các thùng chứa khác và các thùng chứa Qt được thiết kế để hoạt động với các thuật toán STL. Thắng-thắng, thật đấy.
MSalters

12

Xem xét rằng Qt có trình biên dịch meta riêng mà bạn phải xử lý các tệp nguồn của mình, thật khó để coi mã Qt là "chỉ C ++".

Nhưng quan trọng hơn, phong cách của C ++ mà Qt sử dụng và khuyến khích là thứ mà với phần còn lại của chúng tôi, được nhìn thấy lần cuối vào khoảng năm 1995.

Thực sự, đó là một nỗ lực để biến C ++ thành Java giống như có thể. Nó bỏ lỡ, hoặc không khuyến khích, tất cả những điều tuyệt vời thực sự làm cho C ++ đáng sử dụng ngày nay . Thay vào đó, bạn bị khóa vào một tập hợp con mà hầu hết đều cảm thấy như một Java kém hơn.

Vì vậy, nếu mục tiêu là học C ++, tôi sẽ nói không, tránh xa Qt. Có lẽ hãy xem Boost thay vào đó, nếu bạn muốn sử dụng một thư viện đã được thiết lập làm điểm khởi đầu. Boost là hiện thân của các thực hành được coi là tốt ngày hôm nay .

Nhưng thành thật mà nói, nếu bạn muốn học ngôn ngữ C ++ , hãy chọn một cuốn sách giáo khoa tốt và tập trung vào ngôn ngữ này .

Viết một trình duyệt web, bất kể bạn làm như thế nào, tốt nhất sẽ dạy cho bạn về các trình duyệt web. Nó sẽ không dạy bạn nhiều về ngôn ngữ bạn đang sử dụng.

C ++ là ngôn ngữ không có lớp WebBrowser được tích hợp. Nếu bạn đọc tiêu chuẩn C ++, nó không nói về trình duyệt. Nó thậm chí không đề cập đến các ứng dụng GUI.

Đó là bởi vì những thứ đó được xây dựng trên đầu trang, được cung cấp bởi các thư viện như Qt. C ++, giống như bất kỳ ngôn ngữ lập trình nào, là về logic, về cách thể hiện logic đó. Và vâng, điều đó có nghĩa là làm việc với mảng và con trỏ và vòng lặp và tất cả những thứ đó.

Bạn có thể viết trình duyệt web chỉ bằng những công cụ tích hợp đó không, có đủ thời gian không? Bạn có biết làm thế nào để diễn đạt logic chương trình liên quan? Nếu không, sau đó bạn cần dành nhiều thời gian hơn cho các vòng lặp và con trỏ, và ít gọi hơn new QWebKit()và chỉ cõng các thư viện làm sẵn.

"Triết lý và sức mạnh của ngôn ngữ" nằm trong mảng và danh sách và vòng lặp, không phải trong trình duyệt web.


4
Tôi không bao giờ nói rằng họ tốt hơn bởi vì họ là người mới . Họ là người mới và họ tốt hơn. Vấn đề là C ++ như một ngôn ngữ không phù hợp lắm cho cách tiếp cận giống như Java này. Trong C ++, tính đa hình thời gian kế thừa và thời gian chạy là một vấn đề khó khăn, vì thực tế nó đòi hỏi bạn phải phân bổ các đối tượng ở khắp mọi nơi, đó là điều khiến cho ngôn ngữ của nó bị rò rỉ bộ nhớ ở nơi đầu tiên, bởi vì nó dễ bị lỗi nó làm cho việc sao chép các đối tượng khó hơn. Nó cũng không hiệu quả, ít mở rộng hơn và đòi hỏi mã soạn sẵn tẻ nhạt hơn.
jalf

2
Heck, Qt cần trình biên dịch meta riêng của mình chỉ để làm cho phong cách lập trình của họ có thể chịu được . Điều đó không nói với bạn điều gì sao?
jalf

4
Bản thân tôi đã không bảo vệ Qt (tôi thấy rất nhiều hạn chế trong đó). Câu nói của bạn "phong cách của C ++ mà Qt sử dụng và khuyến khích là điều mà với phần còn lại của chúng tôi, được nhìn thấy lần cuối vào khoảng năm 1995." Với công thức này, không rõ điều gì là xấu với phong cách này (khác là nó đã 15 tuổi) và những gì hiện tại, các lựa chọn thay thế tốt hơn. Có lẽ nếu bạn cụ thể hơn những gì bạn muốn nói sẽ trở nên rõ ràng hơn.
Giorgio

3
@JimInTexas: nó cũng có trước C ++. Điểm của bạn? Vào đầu những năm 90, C ++ là một con quái vật rất khác. Nó gần với những gì cuối cùng đã trở thành Java hơn ngày nay.
jalf

3
@JimInTexas: Vâng, nó sai, nhưng nó cũng hy vọng khá rõ ràng ý tôi là gì. Đó là một nỗ lực để đạt được các mục tiêu thiết kế của Java, trong C ++. Đó là một nỗ lực trong việc thực hiện mô hình OOP thiếu sót tương tự mà java thực hiện.
jalf

9

Học C ++ thông qua Khung Qt có thực sự học C ++ không

Có lẽ.

Tôi sẽ phải xem mã bạn đang đặt trong trình xử lý sự kiện của bạn.

Thực sự, đừng bị ám ảnh bởi bao nhiêu bạn "biết". Tất cả chúng ta đều sử dụng các khung cửa sổ và tất cả chúng ta vẫn đang học. Chỉ cần tiếp tục viết mã / đọc những điều mới và bạn sẽ tiếp tục học C ++. Học một khung cửa sổ mới là một bổ sung tuyệt vời cho các kỹ năng của bạn ngay cả khi điều đó có thể không có nghĩa là bạn có thể triển khai mạng thần kinh hoặc quicksort trong C ++.


5

Đừng lo lắng; Lúc đầu, hầu hết các mã của bạn sẽ chỉ sử dụng khung, nhưng sau một thời gian, bạn sẽ phải mở rộng nó, dù chỉ một chút. Sau đó, bạn sẽ phải sử dụng ngày càng nhiều C ++.

Cũng cần nhớ rằng bạn có sẵn toàn bộ nguồn Qt, IDE sẽ vui vẻ đưa bạn đến định nghĩa của bất kỳ hàm / phương thức / lớp nào bạn muốn. Càng đi sâu, bạn càng thấy nhiều C ++.

Những người khác đã đề cập về sự khác biệt giữa Qt C ++ và C ++ tiêu chuẩn. Những mùa thu ở hai trại:

  • thư viện khác nhau: Qt bao gồm tất cả các thùng chứa thông thường: mảng, danh sách, bộ, hashtag, v.v ... Chúng rất phù hợp với nhau và là triển khai tốt, nhưng chúng không phải là giống STD. Tuy nhiên, trong các phiên bản gần đây (4.1 trở lên, tôi nghĩ) chúng có API 'giống như STD' ngoài loại cũ (và API giống Java). Cuối cùng, các lựa chọn thiết kế (khi nào sử dụng một mảng, khi nào sử dụng hàm băm) là như nhau, vì vậy việc thay đổi thành STD cho các dự án không phải là Qt không quá khó.

  • mocbổ sung cú pháp: chủ yếu để xử lý tín hiệu, nhưng cũng có một vài cấu trúc vòng lặp đẹp hơn. Nhiều người cảm thấy công cụ này có nghĩa là nó không còn là C ++ nữa; nhưng IMHO, họ cảm thấy giống như các macro thông minh hơn một chút. Việc xử lý tín hiệu kết hợp lỏng lẻo là một lợi thế rất lớn của một khung công tác tốt và nổi tiếng là khó thực hiện trên một ngôn ngữ gõ tĩnh. Trong C ++ hiện đại, có thể thực hiện được với một lượng lớn các mẫu; nhưng đó là xa tiêu chuẩn khi lần đầu tiên Qt có moc. Cuối cùng, nếu sau này bạn muốn thực hiện các dự án không phải Qt, trước tiên hãy kiểm tra xem bạn có đang sử dụng bất kỳ khuôn khổ nào không và liệu nó có tín hiệu không. Nếu có, thì hầu hết những gì bạn đã từng làm với Qt sẽ được áp dụng, do đó, không có "tác hại" nào trong việc học Qt trước tiên.


Những cải tiến vòng lặp được đưa ra bởi moc?
Basile Starynkevitch

@Basile Starynkevitch: Có thể anh ấy đề cập đến vòng lặp foreach (mà tôi sử dụng rất nhiều). Đây là một bổ sung cú pháp, nhưng, ASAIK, điều này không liên quan gì đến moc. Vì vậy, bạn đã đúng rằng có lẽ câu trả lời nên được đưa ra theo một cách khác.
Giorgio

foreachchỉ là một macro .... (thực sự là một "bí danh" Q_FOREACHđược định nghĩa trong <Qt/qglobal.h>). Tôi không nghĩ rằng đó moclà xử lý nó. Và C ++ 11 có for (auto it : container)cấu trúc!
Basile Starynkevitch

@Basile Starynkevitch: Có lẽ Qt sẽ cần tái thiết sâu nếu phải chuyển sang C ++ 11: Qt được thiết kế cho C ++ (và cũng đã cố gắng khắc phục một số hạn chế của nó) do đó một số giải pháp của nó không cần thiết với C ++ 11.
Giorgio

1
Tôi sử dụng cả Qt và Boost. Có rất nhiều sự chồng chéo giữa hai thư viện, nhưng Qt dễ học hơn nhiều.
Jim ở Texas

4

Qt được sử dụng rộng rãi trong thế giới thương mại vì nó cung cấp một bộ công cụ đa nền tảng và môi trường phát triển, bao gồm một thư viện GUI tốt.

Nó cũng hỗ trợ đầy đủ quốc tế hóa, bao gồm công cụ 'Ngôn ngữ học' tuyệt vời.

Nếu bạn có kế hoạch cho một sự nghiệp học tập thì tôi sẽ không bận tâm với Qt. Mặt khác, nếu bạn thích C ++ và muốn học một kỹ năng thị trường thì Qt đáng để học hỏi.

Và vâng, Qt là C ++, và bạn có thể kết hợp trong các thư viện tiêu chuẩn và tăng cường nội dung trái tim của bạn nếu điều đó làm bạn cảm thấy tốt hơn.


3

Đó là một ý tưởng tồi để tìm hiểu C ++ thông qua Qt. Trước tiên, bạn phải học các khái niệm ngôn ngữ độc lập với bất kỳ khuôn khổ nào và đó là những gì sách c ++ sẽ dạy cho bạn và chúng đúng. Về cơ bản, 'cho và các vòng lặp trong khi, mảng, danh sách, con trỏ' là những gì ngôn ngữ lập trình là tất cả về. Các chức năng bổ sung được cung cấp bởi các khung. Khi bạn học ngôn ngữ lập trình, bạn có thể học bất kỳ khung nào như Qt hoặc MFC được xây dựng bằng ngôn ngữ này, để các ứng dụng có thể được phát triển nhanh chóng. Về Qt, một khi bạn học c ++, đó là một khung công tác tuyệt vời giúp bạn làm việc hiệu quả như bất kỳ nhà phát triển Java hoặc .Net nào. Bạn sẽ sớm có thể phát triển ứng dụng ios và Android bằng cách sử dụng Qt.


2

Chà, tôi nghĩ cách tốt nhất để học C ++ là sử dụng cú pháp CHỈ riêng (C ++ tiêu chuẩn), vì vậy bạn sẽ có thể sử dụng công cụ NGÔN NGỮ, và KHÔNG phải Qt (hoặc bất kỳ khung, thư viện nào khác ... vv).

Tại sao? bởi vì là người mới bắt đầu, khi bạn xem bất kỳ mã C ++ nào được trộn với mã Non-C ++ khác (Qt trong trường hợp này), bạn sẽ không thể thấy những gì của C ++ và những gì không, thay vào đó sẽ là quá trình phức tạp hơn.

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.