Qt'nin tehlikeli köşeleri nelerdir? [kapalı]


10

Güneşin altında mükemmel bir şey yok. Qt bir istisna değildir ve sınırlamaları vardır: GUI dışında bir iş parçacığında pikselleri kullanamayız, QImage'ı kanal başına 16 bit görüntü formatıyla vb. Kullanamayız.

Hangi durumlar sizi Qt sınırlamaları nedeniyle tasarımı bozmaya zorladı?
En nefret edilen tuhaflıklar nelerdir?
Qt projelerinde kullanırken hangi tasarım kararlarından kaçınılmalıdır?


Söyleyebilir misin Qt? Eğer "Q Toolkit" ile genişletmek, bunun bir "" cepheyi ekleyebilirsiniz, ancak bunu söylemek / iyi-uygulama düzeltmek edilir Qt? Sadece merak.
Anto

@Anto: Sanırım, buraya thebağlı corners, değil Qt, ama Rus olduğumdan beri bu sadece sezgisel hisim :)
sarmaşıklar

Olası tehlikeli bir eğri, projenin mali sıkıntı içinde olabileceğidir. Nokia kısa süre önce Microsoft'la (Win7'yi telefonlarında kullanmak için) Qt'un geleceğini titrek bir yere koyan bir anlaşma imzaladı.
Peter Rowell

C ++ görsel programlama için bir noob olduğum için bu cevabı bilmek çok ilgimi
çekiyor

@Vines: "QT'nin tehlikeli köşeleri nelerdir?"
Chris

Yanıtlar:


12

İronik olarak, Qt'un gücünün de dezavantajlarından biri olduğunu söyleyebilirim. Çok güçlü yapılar ve uzantılar vardır, Qt ile yazdığınız kod kolayca "Qt" tarzında oldukça yerleşik hale gelir. İşlevselliği başka bir dile çıkartmaya çalışmak, yeniden yazma anlamına gelmez, Qt'a özgü birçok teknolojiyi bilmeniz gerekir.

Qt'un genişliği, programcıları işe almanın ya Qt deneyimi olan birine bağlı kalmak ya da bu uzmanlık için eğitim anlamına geldiği anlamına gelir. Yükleniciyi hızlandırmak ve hızlandırmak vanilya C ++ 'dan daha zordur.

Qt 3.x'ten 4.x'e değiştiğinde, ekibimiz limanı yapmak için neredeyse 9 ay gerekiyordu, bu süre zarfında küçük yeni işlevler eklendi. Artan geliştirme verimliliğinde büyük yükseltme maliyetini zamanın geri kalanında telafi etmeyi umuyorsunuz. (Not, Qt'ın avantajlarını da atladım, bunların da birçoğu var)


2
Qt3 - Qt4 bağlantı noktası tanıdığım çoğu kişi için zordu. Yeni sürümlerde tanıtılan bu QML ve benzeri şeyler beni endişelendiriyor, çünkü bir kez daha karmaşık bir liman geliyor.
Vitor Py

10

Qt standart C ++ kitaplığını kullanmaz , ancak kendi QString, QVector, QMap, ...

Bu, önemli bir tasarım kararı vermeniz gerektiği anlamına gelir: uygulamanın hangi bölümleri QString'i ve hangi bölümler std :: string'i kullanır?

Bazı bölümlerde std :: string ve diğer bölümlerde QString kullanmak, sınırlamalarda QString ve std :: string arasında dönüştürme yapmanız gerektiği anlamına gelir.

Bu ek yükü önlemek için QString'i uygulamanızın her yerinde kullanmaya karar verebilirsiniz. Ancak bu, Qt'ye dayanmayan üçüncü taraf kitaplıkların, örneğin boost'un kullanılmasını çok daha zorlaştırır.

(Aynı şeyin std :: map vs QMap, std :: vector vs QVector, vb. İçin de geçerli olduğunu unutmayın)

Karar vermek hangi parçalar QT'ın türlerini kullanmak ve hangi parçaların STL kullanma büyük etkileri olan çok büyük tasarım kararı vardır. Ve sadece Qt standart C ++ libary kullanmayı reddettiği için.

IMHO, bu karar projeye bağlı olarak her iki şekilde de geçerli olabilir. Kaçınılması gereken soruya cevap veremem.


1
Kabul ediyorum, ama kenarda dışarı çıkmak ve onlarla çalışmak çok güzel olduğu için QString (vb vb) de güçlü yanlarından biri olduğunu söyleyebilirim.
Johan

1
Ayrıca, QString kullanmayan bir kitaplığı kullanmak o kadar da zor değil. Bir QString'i std :: string'e dönüştürmek için basit bir yöntem vardır. Çok fazla değil.

@Glenn Nelson: Evet, günümüzde QString için dönüştürme işlevleri var; çok kullanışlı ve kullanışlı! Ancak özellikle QVector ve QMap için dönüştürme işleminde ek yük olacaktır (ve basit çözümler örneğin QVector <QString> için çalışmaz); Tasarım sırasında performans sorunlarından kaçınmak için bu ek yük tasarım sırasında dikkate alınmalıdır.
Sjoerd

3

Bu doğrudan soruyu cevaplamıyor, ancak bahsetmeye değer olduğunu düşünüyorum: belki Qt'nin en 'tehlikeli' yönü Nokia'nın MSoft ile yatağa girmiş olması ...


2
Ama bunu yapmak için Qt'yi terk ettiler.
Martin Beckett

1
Tamlık uğruna - Qt'nin ticari kısmı artık Digia'ya aitken, Qt, başkalarının kolayca katkıda bulunabileceği bir "açık yönetim" sistemine geçti. Qt'yi kapalı kaynağa karşı koruyan KDE Free Qt vakfı da vardır.
Vishesh Handa

2

Son zamanlarda bir QChar'ın ismine rağmen aslında bir karaktere değil, UTF-16 kod birimine karşılık geldiğini öğrendim. Bu nedenle, keyfi bir Unicode metin karakterini karaktere göre taramak istediğinizde, yüksek ve düşük vekillerle başa çıkmak, karakterleri ve benzerlerini birleştirmek için algoritmalar eklemeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.