crossplatform.ru

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

> Сброс выделения текста в редактируемом QComboBox
XXL
  опции профиля:
сообщение 22.12.2009, 0:29
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 26.4.2009
Пользователь №: 708

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




Репутация:   0  


Всем доброй ночи!
Хочу задать маленький вопрос. Есть редактируемый QComboBox. Не могу понять, почему в его QLineEdit производится выделение текста. А именно отлавливаю сигнал изменения текста editTextChanged(const QString&). Получаю текущую позицию курсора, устанавливаю новый текст в текущую ячейку, а потом снова возвращаю курсор на полученную позицию:
void CWorkForm::OnEditTextChanged(const QString& strText)
{
    int pos = m_pComboBox->lineEdit()->cursorPosition();

    m_pComboBox->setItemText(iCurIndex, strText);

...............................................................

    m_pComboBox->lineEdit()->setCursorPosition(pos);
}


После этого в редактируемой строке выделяется кусок слова от последней позиции до pos...Также была испробована функция void QLineEdit::cursorBackward ( bool mark, int steps = 1 ) с mark = false и количеством шагов, равным количеству символов от конца слова до текущей позиции. Результат аналогичный...Почему такое может быть? А хотелось бы параллельно с редактированием слова редактировать ячейку без выделения текста...

Сообщение отредактировал XXL - 22.12.2009, 0:30
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 23.12.2009, 15:51
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(XXL @ 23.12.2009, 11:07) *
Этот сигнал в данном случае не отлавливается
Как это не отлавливается. Выделение есть, а сигнал не испускается ;)
main_test.cpp
#include <QtTest>
#include <QtDebug>
#include <QComboBox>
#include <QLineEdit>
#include <QGridLayout>

class MyClass : public QWidget
{
    Q_OBJECT
public:
    MyClass(QWidget * parent = 0)
        : QWidget(parent), pos(-1), comboBox(NULL)
    {
        comboBox = new QComboBox(this);
        comboBox->addItems(QStringList() << "test" << "string" << "qwerty");
        comboBox->setEditable(true);

        QGridLayout * layout = new QGridLayout(this);
        layout->addWidget(comboBox);

        connect(comboBox->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(OnEditTextChanged(QString)));
        // если закоментировать этот коннект, выделение сохранится
        connect(comboBox->lineEdit(), SIGNAL(selectionChanged()), this, SLOT(deselect()));
    }

    QComboBox * getComboBox() const
    {
        return comboBox;
    }

public slots:
    void OnEditTextChanged(const QString& strText)
    {
        if (!comboBox) return;
        pos = comboBox->lineEdit()->cursorPosition();
        comboBox->setItemText(comboBox->currentIndex(), strText);
        comboBox->lineEdit()->setCursorPosition(pos);
    }

    void deselect()
    {
        if(comboBox && pos!=-1) {
            comboBox->lineEdit()->deselect();
            pos = -1;
        }
    }

private:
    int pos;
    QComboBox * comboBox;
};


class Test_MyClass : public QObject
{
    Q_OBJECT
private slots:
    void testSelectText()
    {
        MyClass * test = new MyClass;
        test->resize(250,35);
        test->show();

        QTest::qWait(3000);
        QCoreApplication::processEvents();

        QComboBox * box = test->getComboBox();

        // хм... А вот здесь происходит выделение текста в lineEdit'e comboBox'a
        box->lineEdit()->setCursorPosition(1);
        QTest::keyClicks(box->lineEdit(), "e");
        QCOMPARE(box->lineEdit()->selectionStart(), -1);

        QTest::qWait(5000);
    }
};

QTEST_MAIN(Test_MyClass)
#include <main_test.moc>
.pro
TEMPLATE = app
CONFIG  += teambuilder qtestlib warn_on debug create_prl link_prl
SOURCES += main_test.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 25.1.2025, 5:31