Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сохранить Qt::AlignLeft для QLineEdit при уменьшении его размера при сдвиге сплиттера?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Steklova Olga
Здравствуйте! Работаю с Qt 4.7, Firebird 2.1.
У меня есть горизонтальный сплиттер splitter_Horiz, к которому подключены виджеты widget_left и widget_right.
Для widget_left установлен GridLayout (в 0-м столбце - Label'ы, в 1-м столбце - LineEdit'ы).
Есть DataWidgetMapper, к которому подключены LineEdit'ы.
В полях таблицы, установленной для модели, записаны строки до 30 символов или числа.

Когда перемещаю сплиттер влево, ширина LineEdit'ов уменьшается и строки полностью уже не помещаются.

Но при этом левое выравнивание в LineEdit'ах на глазах превращается в правое,
а мне хотелось бы сохранить левое.
Подскажите, пожалуйста, как это сделать?
Steklova Olga
Не подскажете, уважаемый ilyabvt,
в данном случае тоже надо переопределить paintEvent для lineEdit
или это не поможет?
Правда, я совсем не умею это делать и,
видимо, мне придется смириться с текущим состоянием отображения :(
Steklova Olga
Может быть, все-таки кто-нибудь знает, как решить эту задачку?
Ведь если строки полностью не помещаются в отведенное для них место, мне кажется, было бы логичнее
видеть их первые символы как более важные, а не последние, разве не так? Подскажите, пожалуйста.
BlueIceScream
На самом деле при изменении размеров QLineEdit думает так:

У меня есть текст.
Он имеет определенную длину.
С текстом связана позиция курсора.
Курсор стоит там где его оставил пользователь. (или где он установился когда вы добавили текст)
При уменьшении я буду стараться отображать ту позицию где установлен курсор, раз он там стоит, то значит это отображение приоритетнее для пользователя.


Для исправления этого просто после каждого изменения текста устанавливайте курсор на нулевую позицию

void QLineEdit::setCursorPosition ( int )


Steklova Olga
Да, конечно, BlueIceScream, Вы правы! Вы снова радуете прекрасным, толковым ответом!
С наступающим новым годом, и всего самого доброго Вам и Вашим близким! :)

Остался еще вопрос про QLineEdit.
У меня в lineEdit'ах отображаются данные mapper'а, при этом мне надо только отображать данные, редактировать их не надо. Чтобы lineEdit'ы никак не реагировали на нажатия кнопок мыши выполняю следующие действия:
    lineEdit->setReadOnly(true);
    lineEdit->setFocusPolicy(Qt::NoFocus);
    lineEdit->setContextMenuPolicy(Qt::PreventContextMenu);

Осталась не обработанной следующая ситуация. Если оператор сделает двойной клик по тексту в одном lineEdit'е, то этот текст будет выделен синим фоном, если затем он сделает двойной клик по тексту в другом lineEdit'е, то этот текст тоже будет выделен синим фоном. А мне надо, чтобы текст не выделялся.
Что для этого надо сделать?
wiz29
Цитата(Steklova Olga @ 29.12.2011, 12:03) *
Если оператор сделает двойной клик по тексту в одном lineEdit'е, то этот текст будет выделен синим фоном, если затем он сделает двойной клик по тексту в другом lineEdit'е, то этот текст тоже будет выделен синим фоном. А мне надо, чтобы текст не выделялся.
Что для этого надо сделать?


Есть несколько путей решения:
1. Долгий - перехватывать и игнорировать определенный набор событий для соответствующего QLineEdit
2. Заменить QLineEdit на QLabel для отображения статических данных
Steklova Olga
Цитата
Заменить QLineEdit на QLabel для отображения статических данных

Если поменять для отображения какого-нибудь параметра mapper'а lineEdit на label,
то этот параметр вообще не отобразится.
wiz29
Цитата(Steklova Olga @ 29.12.2011, 16:08) *
Цитата
Заменить QLineEdit на QLabel для отображения статических данных

Если поменять для отображения какого-нибудь параметра mapper'а lineEdit на label,
то этот параметр вообще не отобразится.


Чем отличается отображение одного QWidget от отображения другого QWidget?
Steklova Olga
У меня есть таблица БД. Создана модель, для которой установлена эта таблица.
Создан mapper, для которого установлена эта модель. Далее у меня было
    mapper->addMapping(lineEdit1, 1);
    mapper->addMapping(lineEdit2, 2);
При этом в mapper'e отображались оба поля таблицы.
Если написать вот так (как Вы предложили)
    mapper->addMapping(label1, 1);
    mapper->addMapping(lineEdit2, 2);
то первое поле таблицы перестанет отображаться совсем.
BlueIceScream
Используйте следующий метод:

{
  ...
  connect(<lineedit>,SIGNAL(selectionChanged()),this,SLOT(UnSelect());
  ...
}

void <class name>:: UnSelect()
{
   lineedit->deselect();
}
wiz29
Цитата(Steklova Olga @ 29.12.2011, 16:33) *
У меня есть таблица БД. Создана модель, для которой установлена эта таблица.
Создан mapper, для которого установлена эта модель. Далее у меня было
    mapper->addMapping(lineEdit1, 1);
    mapper->addMapping(lineEdit2, 2);
При этом в mapper'e отображались оба поля таблицы.
Если написать вот так (как Вы предложили)
    mapper->addMapping(kabel1, 1);
    mapper->addMapping(lineEdit2, 2);
то первое поле таблицы перестанет отображаться совсем.


Это еще почему?

принципиально не вижу ограничений использования виджета с типом QLabel для установки в QDataWidgetMapper
Steklova Olga
Цитата
принципиально не вижу ограничений
А Вы сами-то пробовали подключить label к mapper'у?

А вот обработка сигнала selectionChanged помогла. Спасибо, BlueIceScream!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.