La mayoría de mis quejas con Qt vienen del hecho de que la API no abarca por completo el dinamismo proporcionado por QObject. Si se atrevió a crear un compilador de metaobjetos para agregar un comportamiento dinámico a C++, ¿por qué ser tímido al respecto?
Todo lo que menciono a continuación son cosas que mi equipo necesitaba en algún momento y tuvimos que codificarlo nosotros mismos. Fue muy divertido y aprendimos mucho sobre las partes internas de Qt, pero no me importaría si ya estaba hecho y listo para usar.
No Distribuidos QObject
Ya sabes, como en el cacao. Llegaron a mitad de camino con QtDBus: lo único que queda por hacer es la red. Tuvimos que implementar nuestra propia solución para esto, y dado que vivimos fuera del código Qt, no podemos cambiar las partes internas para implementar todas las características agradables.
No API para almacenamiento de datos
Y, por supuesto, cada uno escribe su propia biblioteca incompleta QObject-a-SQLite. QDataStream es un muy buen comienzo, sin embargo.
Sin enlace de datos de
Bueno, Qt Quick tiene vinculante, pero el enlace de datos, que vivan en QtCore datos. Con un enlace de datos decente, escribir QAbstractItemModels que represente colecciones de QObjects debería ser cosa del pasado: QObjectListModel debería ser todo lo que necesita.
(Sí, QDataWidgetMapper es una broma.)
Sin Gestión Automática de Deshacer para QObjects
Nuestras clases del modelo son por lo general QObjects y Q_PROPERTY tiene una señal NOTIFICAR opcional que es exactamente lo que se necesita para poner en práctica Deshacer automático Es tan fácil de hacer que ya debería ser parte de Qt. (Se requiere un par de kludges, sin embargo.)
Propiedades Ninguna colección
No todas las propiedades nacen iguales. Algunos de ellos son colecciones. Ser capaz de tratar con esos de una manera abstracta sería definitivamente algo bueno.
de media al horno QMetaStuff API
Y sólo odian esta API porque lo amo. Por ejemplo, uno no puede:
- compilar QMetaObjects dinámicamente y reemplazarlos;
- llaman a un meta-método utilizando un QVariants como argumentos;
- métodos de consulta por tipo de declaración, nombre o tipo de argumento;
- conectan señales y ranuras usando los respectivos QMetaMethods (at least not until 4.8);
- interceptar conjunto de propiedades/obtener de la misma manera que puede interceptar eventos, por ejemplo.
Casi todos estos se pueden manipular fácilmente. Una solución para # 2:
QVariant call(QObject* object, QMetaMethod metaMethod, QVariantList args)
{
QList<QGenericArgument> arguments;
for (int i = 0; i < args.size(); i++) {
// Notice that we have to take a reference to the argument. A
// const_cast is needed because calling data() would detach
// the QVariant.
QVariant& argument = args[i];
QGenericArgument genericArgument(
QMetaType::typeName(argument.userType()),
const_cast<void*>(argument.constData())
);
arguments << genericArgument;
}
QVariant returnValue(QMetaType::type(metaMethod.typeName()),
static_cast<void*>(NULL));
QGenericReturnArgument returnArgument(
metaMethod.typeName(),
const_cast<void*>(returnValue.constData())
);
// Perform the call
bool ok = metaMethod.invoke(
object,
Qt::AutoConnection, // In case the object is in another thread.
returnArgument,
arguments.value(0),
arguments.value(1),
arguments.value(2),
arguments.value(3),
arguments.value(4),
arguments.value(5),
arguments.value(6),
arguments.value(7),
arguments.value(8),
arguments.value(9)
);
if (!ok) {
// Handle the error...
} else {
return returnValue;
}
}
características útiles, probablemente se retira
Se habla en qt-interés que el DOM, style sheets y custom file engines se eliminará en una versión futura de Qt.
Phonon no tiene multi-plataforma de servicios de fondo
Además de no realmente trabajando todo el tiempo, phonon ninguna de fondo estable que trabaja en las tres plataformas más comunes: Windows, Linux y Mac OS X Hay un back-end de VLC, pero definitivamente no es estable, su licencia no está clara y, además, el soporte de VLC para Mac es "resting on shaky ground". La culpa es enteramente de Linux, por supuesto. El soporte multimedia tiene never beenone of its strengths. Le falta algo como Quicktime o DirectStuff.
Clases No Crypto
Hay QCryptographicHash y QSSLSocket (y su funny error modes), y eso es todo. Afortunadamente, hay dos buenas bibliotecas para llenar este vacío: Botan y QCA. QCA se basa en Qt, pero copia su API de las clases de cifrado de Java, por lo que no es muy bueno. Botan tiene una interfaz ingeniosa y (¿pero?) Es C++ "puro". Aún falta una biblioteca de cifrado de estilo Qt.
Parece que a las personas les gusta demasiado Qt como para criticarlo :-) – Tuminoid
¡Pondré otra recompensa de +50 para obtener mejores respuestas! Haz que vengan. – Tuminoid
quedan 2 días en la segunda recompensa, traiga sus problemas con Qt y cómo los elude, o cómo le gustaría que fueran reparados. – Tuminoid