crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как сохранить Qt::AlignLeft для QLineEdit при уменьшении его размера при сдвиге сплиттера?
Steklova Olga
  опции профиля:
сообщение 2.11.2011, 16:06
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Здравствуйте! Работаю с 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
  опции профиля:
сообщение 11.11.2011, 20:08
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Не подскажете, уважаемый ilyabvt,
в данном случае тоже надо переопределить paintEvent для lineEdit
или это не поможет?
Правда, я совсем не умею это делать и,
видимо, мне придется смириться с текущим состоянием отображения :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 28.12.2011, 14:51
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Может быть, все-таки кто-нибудь знает, как решить эту задачку?
Ведь если строки полностью не помещаются в отведенное для них место, мне кажется, было бы логичнее
видеть их первые символы как более важные, а не последние, разве не так? Подскажите, пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 28.12.2011, 20:36
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

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




Репутация:   3  


На самом деле при изменении размеров QLineEdit думает так:

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


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

void QLineEdit::setCursorPosition ( int )


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.12.2011, 11:03
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


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

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

Осталась не обработанной следующая ситуация. Если оператор сделает двойной клик по тексту в одном lineEdit'е, то этот текст будет выделен синим фоном, если затем он сделает двойной клик по тексту в другом lineEdit'е, то этот текст тоже будет выделен синим фоном. А мне надо, чтобы текст не выделялся.
Что для этого надо сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 29.12.2011, 14:29
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


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


Есть несколько путей решения:
1. Долгий - перехватывать и игнорировать определенный набор событий для соответствующего QLineEdit
2. Заменить QLineEdit на QLabel для отображения статических данных
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.12.2011, 15:08
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


Цитата
Заменить QLineEdit на QLabel для отображения статических данных

Если поменять для отображения какого-нибудь параметра mapper'а lineEdit на label,
то этот параметр вообще не отобразится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 29.12.2011, 15:18
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


Цитата(Steklova Olga @ 29.12.2011, 16:08) *
Цитата
Заменить QLineEdit на QLabel для отображения статических данных

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


Чем отличается отображение одного QWidget от отображения другого QWidget?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Steklova Olga
  опции профиля:
сообщение 29.12.2011, 15:33
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

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




Репутация:   4  


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

Сообщение отредактировал Steklova Olga - 29.12.2011, 16:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 29.12.2011, 15:33
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

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




Репутация:   3  


Используйте следующий метод:

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

void <class name>:: UnSelect()
{
   lineedit->deselect();
}


Сообщение отредактировал BlueIceScream - 29.12.2011, 15:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги


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




RSS Текстовая версия Сейчас: 26.12.2024, 4:23