2014-12-26 5 views
2

Я пытаюсь создать автозаполнения lineedit, используя значения из моей базы данных SQLite, проблема заключается в том, что не автозаполнение в строке редактирования, код я использую нижеQt SQL базы данных автозаполнения

AutoComplete(); 
QCompleter *Account_completer = new QCompleter(AccountList); 
QCompleter *Product_completer = new QCompleter(ProductList); 
Account_completer->setCaseSensitivity(Qt::CaseInsensitive); 
Product_completer->setCaseSensitivity(Qt::CaseInsensitive); 
ui->lineEdit_Invoice_Account->setCompleter(Account_completer); 
ui->lineEdit_Invoice_Product->setCompleter(Product_completer); 

мой автозаполнения процедура ниже

QSqlQuery Account; 
QSqlQuery Product; 
switch(ui->comboBox_Invoice_Account_Search->currentIndex()) 
{ 
    case 0: 
     Account.prepare("SELECT Customer_ID FROM Customer"); 
     Account.exec(); 
     break; 
    case 1: 
     Account.prepare("SELECT Company_Name FROM Customer"); 

     break; 
    case 2: 
     Account.prepare("SELECT Company_Owner FROM Customer"); 
     break; 
    case 3: 
     Account.prepare("SELECT Phone_Number FROM Customer"); 
     break; 
    case 4: 
     Account.prepare("SELECT BULSTAT FROM Customer"); 
     break; 
} 
switch(ui->comboBox_Invoice_Product_Search->currentIndex()) 
{ 
    case 0: 
     Product.prepare("SELECT Product_CODE FROM Product"); 
     break; 
    case 1: 
     Product.prepare("SELECT Product_Name FROM Product"); 
     break; 
} 
Account.exec(); 
qDebug() << "SQL QUERY Account:" << Account.executedQuery(); 
qDebug() << "SQL ERROR Account:" << Account.lastError(); 
while(Account.next()) 
    AccountList = Account.value(0).toStringList(); 
Product.exec(); 
qDebug() << "SQL QUERY Product:" << Product.executedQuery(); 
qDebug() << "SQL ERROR Product:" << Product.lastError(); 
while(Product.next()) 
    ProductList = Product.value(0).toStringList(); 
for(int x = 0; x <= Account.size(); x++) 
    qDebug() << AccountList.at(x).toLocal8Bit().constData() << endl; 
for(int y = 0; y <= Product.size(); y++) 
    qDebug() << ProductList.at(y).toLocal8Bit().constData() << endl; 
} 

Спасибо

+0

Если вы продолжаете удалять свои вопросы после получения ответов, мы не будем помогать. Это немного грубо и тратит время. – lpapp

+0

Я извиняюсь за это. – Root0x

+0

Не беспокойтесь. Из любопытства: почему вы удалили этот ответ? Что вы нашли? Вы пропустили этот следующий() звонок, который я упомянул, или что-то еще? – lpapp

ответ

4

Я не знаю, если вы настроите подключение к базе данных и QSqlQuery правильно. Но нет необходимости заполнять QCompleter вручную. Вы можете использовать модель как QSqlTableModel и использовать QCompleter::setCompletionColumn установить конкретный столбец для поиска по Completer:

QSqlTableModel * model = new QSqlTableModel(this,db); 
model->setTable("Customer"); 
model->select(); 

QCompleter *Account_completer = new QCompleter(model, this); 
completer->setCompletionColumn(someIndex); 

Вы можете определить индекс столбца someIndex самостоятельно, вероятно, здесь выбранный индексом поля со списком.

+1

, если я не ошибаюсь: впоследствии вам все равно придется подключить QLineEdit к этому дополнению, p.e. 'ui-> somelineedit-> setCompleter (Account_completer);' и связать его с картографом? – Wim

+0

@Wim Да, вы должны назначить дополнение к редактированию строки. – Nejat

+0

thx :-) Я попробовал это на https://github.com/vvim/BT_deelnemers/commit/1895144677a2862ff085175d254b11035d73482b (строки 401-403 из cpp), но он не работал. Может быть, ссылка на картупера тоже? – Wim

Смежные вопросы