Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Pupil от Сентябрь 13, 2012, 12:43



Название: Некорректный перебор списка QCompleter с клавиатуры
Отправлено: Pupil от Сентябрь 13, 2012, 12:43
Доброго дня!

При выборке элементов из столбца таблицы и отображении элементов мышью можно выбрать любой элемент, а с клавиатуры проматываются элементы только снизу вверх и перебор идёт последнего, первого элемента и самого 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 работает корректно, но оно не устраивает. )


Название: Re: Некорректный перебор списка QCompleter с клавиатуры
Отправлено: GreatSnake от Сентябрь 13, 2012, 12:45
С QTreeView работает корректно, но оно не устраивает. )
Чем не устраивает QTreeView?


Название: Re: Некорректный перебор списка QCompleter с клавиатуры
Отправлено: Pupil от Сентябрь 13, 2012, 13:08
TreeView выдаёт кроме искомого столбца - столбец id и размер TreeView не соответствует полному, т.е. сжато и со скроллингами. Обычный список и аккуратен и прост.