Russian Qt Forum
Ноябрь 23, 2024, 10:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Некорректный перебор списка QCompleter с клавиатуры  (Прочитано 2323 раз)
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 работает корректно, но оно не устраивает. )
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Сентябрь 13, 2012, 12:45 »

С QTreeView работает корректно, но оно не устраивает. )
Чем не устраивает QTreeView?
Записан

Qt 5.11/4.8.7 (X11/Win)
Pupil
Гость
« Ответ #2 : Сентябрь 13, 2012, 13:08 »

TreeView выдаёт кроме искомого столбца - столбец id и размер TreeView не соответствует полному, т.е. сжато и со скроллингами. Обычный список и аккуратен и прост. 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.