[Qt-jambi-interest] QCompleter and models.

José Arcángel Salazar Delgado arcangel.salazar at gmail.com
Wed May 20 20:29:25 CEST 2009


Hi

I'm trying to use the QCompleter with a custom model. But apparetly, the 
QCompleter doesn't like my custom model, and doesn't workat all.

This is the code of the custom model:

package com.nettrace.models;

import java.util.Vector;

import com.trolltech.qt.core.QModelIndex;
import com.trolltech.qt.core.Qt.ItemDataRole;
import com.trolltech.qt.gui.QAbstractTableModel;
import com.trolltech.qt.sql.QSqlTableModel;

public class ClientesVectorModel extends QAbstractTableModel {
        
        public Vector<Cliente> clientes;
        
        public ClientesVectorModel() {
                
        }
        
        public ClientesVectorModel(Vector<Cliente> clientes) {
                beginInsertRows(null, 0, clientes.size()-1);
                this.clientes = clientes;
                endInsertRows();
        }
        
        @Override
        public int columnCount(QModelIndex arg0) {
                return 10;
        }

        @Override
        public Object data(QModelIndex index, int role) {
                String data= new String("");
                if(role == ItemDataRole.DisplayRole){
                        if(index.column()==0){
                                data = 
String.valueOf(clientes.elementAt(index.row()).getId());
                        }
                        else if (index.column() == 1){
                                data = 
clientes.elementAt(index.row()).getRazonSocial();
                        }
                        else if (index.column() == 2){
                                data = 
clientes.elementAt(index.row()).getCiudad();
                        }
                        else if (index.column() == 3){
                                data = 
clientes.elementAt(index.row()).getColonia();
                        }
                        else if (index.column() == 4){
                                data = 
clientes.elementAt(index.row()).getCp();
                        }
                        else if (index.column() == 5){
                                data = 
clientes.elementAt(index.row()).getDireccion();
                        }
                        else if (index.column() == 6){
                                data = 
clientes.elementAt(index.row()).getEstado();
                        }
                        else if (index.column() == 7){
                                data = 
clientes.elementAt(index.row()).getRazonSocial();
                        }
                        else if (index.column() == 8){
                                data = 
clientes.elementAt(index.row()).getRfc();
                        }
                        else if (index.column() == 9){
                                data = 
clientes.elementAt(index.row()).getTelefono();
                        }
                        return data;
                }

                return null;

        }

        @Override
        public int rowCount(QModelIndex parent) {
                return clientes.size();
        }

}

And this is the code that is calling the QCompleter:

//this return a vector with "Clientes". Works Well.
clientesVectorModel = new ClientesVectorModel(Cliente.getAll()); 
nombreClientesCompleter.setModel(clientesVectorModel);
nombreClientesCompleter.setCompletionRole(ItemDataRole.DisplayRole);
nombreClientesCompleter.setCaseSensitivity(CaseSensitivity.CaseInsensitive);
ui.razonSocialLineEdit.setCompleter(nombreClientesCompleter);
nombreClientesCompleter.activatedIndex.connect(this,"completarCliente(QModelIndex)");






More information about the Qt-jambi-interest mailing list