Доброго дня!
При выборке элементов из столбца таблицы и отображении элементов мышью можно выбрать любой элемент, а с клавиатуры проматываются элементы только снизу вверх и перебор идёт последнего, первого элемента и самого LineEdita.
Qt 4.5.3, ОС МСВС 3.0
#include <QSqlQuery>
#include <QSqlRecord>
#include <QMessageBox>
#include <QComboBox>
#include <QSqlTableModel>
#include <QDebug>
#include "test_completer.h"
#include "ui_test_completer.h"
Test_completer::Test_completer(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::Test_completer),
completer(0)
{
m_ui->setupUi(this);
modelC = new QSqlTableModel(this);
modelC->setTable("test");
modelC->select();
completer = new QCompleter(this);
completer->setModel(modelС);
completer->setCompletionColumn(modelС->fieldIndex("name_test"));
completer->setModelSorting(QCompleter::CaseInsensitivelySortedModel);
completer->setCaseSensitivity(Qt::CaseInsensitive);
//completer->setMaxVisibleItems(10); // Пишет, что метод неизвестен
connect(completer,SIGNAL(activated(QModelIndex)),this,SLOT(SelectTest(QModelIndex)));
m_ui->lineEdit1->setCompleter(completer);
}
void Test_completer::SelectTest(QModelIndex)
{
qDebug() << "Selected Text =" << m_ui->lineEdit1->text();
}
Test_completer::~Test_completer()
{
delete m_ui;
}
void Test_completer::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}
}
#ifndef TEST_COMPLETER_H
#define TEST_COMPLETER_H
#include <QtGui/QDialog>
class QSqlRelationalTableModel;
class QModelIndex;
class QSqlTableModel;
class QCompleter;
namespace Ui {
class Test_completer;
}
class Test_completer : public QDialog {
Q_OBJECT
public:
Test_completer(QWidget *parent = 0);
~Test_completer();
protected:
void changeEvent(QEvent *e);
void closeEvent(QCloseEvent *event);
private:
Ui::Test_completer *m_ui;
QSqlTableModel *modelC;
QCompleter *completer;
private slots:
void SelectTest(QModelIndex);
};
#endif // TEST_COMPLETER_H
В чём состоит причина такого поведения при переборе элементов с клавиатуры?
Применение
lv = new QListView;
completer->setPopup(lv);
также не дало результатов.
С QTreeView работает корректно, но оно не устраивает. )