2009-11-09 14 views
18

¿Hay un equivalente de enlace de datos de .NET en Qt?Qt equivalente al enlace de datos .NET?

Quiero llenar algunos cuadros combinados y otros widgets con QStrings que se refieren a entidades específicas en mi base de datos. Sin embargo, sería más claro si pudiera vincular los datos a estas cadenas en lugar de consultar nuevamente la base de datos a partir de una nueva selección de cuadro combinado o algún otro esquema basado en la construcción de mi propio índice de entidades que se buscarían con las QStrings.

Lo mejor que he encontrado es derivar estas entidades de QString e insertarlas en los widgets de esta manera, pero todavía no lo he probado. No estoy seguro si funcionará de la manera que quiero, y parece un truco desagradable.

Si no hay enlace de datos, ¿qué sugieres?

Gracias.

+8

+1 Por alguna razón, la idea de que debe ser simple vincular los elementos de la interfaz de usuario a una base de datos o un modelo en la memoria nunca llegó muy lejos del mundo de Windows. Si bien es posible con señales Qt, sigue siendo un montón de código de placa de caldera y muy tedioso :( –

+0

En realidad, es una idea muy antigua anterior a .Net. Lo estaba usando en los marcos de formularios OOFILE en 1997 y he visto código generado por AppMaker de una cosecha aún anterior que genera enlaces, incluso apuntando al código puro C. –

Respuesta

3

Bueno, para combobox específicamente, puede establecer un modelo. Para QObjects en general, puede usar la señal de notificación para propiedades para conectarse u otras señales no relacionadas con la propiedad. Creo que hay otra forma de hacerlo, pero no recuerdo.

+0

Esto parece ser el camino a seguir, gracias. Tengo algo nuevo para Qt, y su sugerencia sobre los Modelos parece la manera más fácil de hacerlo. Creo que este es un enfoque bastante feo para el enlace de datos, pero parece ofrecer la funcionalidad que quiero. Gracias de nuevo. –

+3

Sugiero que mire QDataWidgetMapper, que funciona para widgets que no están bajo el framework MVC. – cheez

5

Una forma es usar Qt Model/View Classes (con base en QAbstractItemModel), pero necesitan que su widget herede QAbstractItemView (esto son widgets como QTableView, etc.).
Si desea asignar el modelo de Qt al conjunto de widgets, que no tienen nada en común con QAbstractItemView, puede usar QDataWidgetMapper, que asigna un widget por separado a los índices de Qt Model/View. Pero de todos modos, como dijo Aaron Digulla, debe escribir un código de placa de caldera ...

6

Como el usuario despreocupado mencionado en un comentario, puede utilizar la clase QDataWidgetMapper. Esta es una manera bastante fácil de enlazar widgets arbitrarios a datos que se almacenan en un QAbstractItemModel.

El ejemplo de la página vinculada muestra en unas pocas líneas de código, cómo se puede vincular su modelo de datos para los widgets de entrada utilizados comunes:

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst();