crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QCompleter и ввод, разделенный запятыми
Флинт
  опции профиля:
сообщение 6.12.2011, 8:56
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 1.10.2011
Пользователь №: 2919

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подскажите как переопределить QLineEdit и QCompleter так, чтобы осуществить ввод по типу ввода тэгов на многих сайтах (например LJ), то есть после ввода запятой после слова начинается другое слово, и включается автодополнение. То есть надо как-то сообщить qcompleter о том, что строка разделена на несколько слов, а не является одним целым. Все примеры, которые нашел в сети написаны на Python, а у меня мозг от него взрывается :)

Тьфу блин, почти сразу же после того, как создал тему нашлось решение, ну запощу, может кому пригодится:

class MultiSelectCompleter : public QCompleter
{
    Q_OBJECT
public:
    MultiSelectCompleter( const QStringList& items, QObject* parent );
    ~MultiSelectCompleter();

public:
    QString pathFromIndex( const QModelIndex& index ) const;
    QStringList splitPath( const QString& path ) const;
};


MultiSelectCompleter::MultiSelectCompleter( const QStringList& items, QObject* parent )
    : QCompleter( items, parent )
{
}

MultiSelectCompleter::~MultiSelectCompleter()
{
}

QString MultiSelectCompleter::pathFromIndex( const QModelIndex& index ) const
{
    QString path = QCompleter::pathFromIndex( index );

    QString text = static_cast<QLineEdit*>( widget() )->text();

    int pos = text.lastIndexOf( ',' );
    if ( pos >= 0 )
         path = text.left( pos ) + ", " + path;

    return path;
}

QStringList MultiSelectCompleter::splitPath( const QString& path ) const
{
    int pos = path.lastIndexOf( ',' ) + 1;

    while ( pos < path.length() && path.at( pos ) == QLatin1Char( ' ' ) )
        pos++;

    return QStringList( path.mid( pos ) );
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 20:47