![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Итак, дан виджет, например QTextEdit.
Вопрос следующий: как переключить этот или любой другой виджет в режим "только на показ"? То есть виджет только отрисовывает сам себя. При этом запрещается изменение курсора, ввод, фокус, контекстное меню, выделение содержимого и любые другие действия, не связанное с отрисовкой виджета на форме. Документацию QT4 рыл, не нарыл. Это сообщение отредактировал(а) JackYF - 11.10.2007, 23:27 |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Есть три идеи, работоспособность которых тебе придётся проверить самому(ибо у меня времени нет).
1. Унаследоваться от необходимого виджета и переопределить ф-цию event в которой и фильтровать все события, кроме отрисовки. 2. Возможно setFocusPolicy(Qt::NoFocus) сделает всё что тебе нужно. 3. Заменить нужный виджет пустым, но старый не удалять, а делать для него realWidget->render(dummyWidget/*, ... */), когда необходима перерисовка. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Интересно, а что если его просто выключить (setDisabled )?
|
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Це иногда изменяет внешний вид(становится серым, к примеру)...
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
archimed7592, да. Но в т.з. не указано, что он должен отображаться, как обычно.
![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Чтоб TextEdit не принимал изменения нужно установить флаг ReadOnly |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
mes, а если другой виджет
![]() Речь не о TextEdit конкретно: -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
JackYF |
|
||||||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
попробую
пробовал - не помогает.
пока не очень понял, но пороюсь в документации
абсолютно верно, поэтому и не подходит это само собой. Этот флаг и так установлен в первую очередь. Но курсор при наведении на виджет меняется и можно выделять даже read-only текст. + контекстное меню, которого быть не должно. Исправляюсь. Виджет должен отображаться, как обычно ![]() ![]() |
||||||||
|
|||||||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Вот еще вариант решения, возможно не самый красивый, но очень эффективный
![]() Поставить у нужного виджета focusPolicy = Qt::NoFocus, и положить сверху него QFrame того же размера, с frameShape = QFrame::NoFrame и autoFillBackground = false. Будет всё видно, но до самого виджета юзер не доберётся. Лучше это даже оформить в какой-нибудь контейнерный WidgetHider класс, который это всё делает (порядок создания виджетов похоже имеет значение, фрэйм надо позже создавать, по крайней мере в дизайнере). -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Очень неплохая идея, обязательно в скором времени попробую. Как только разгребусь с остальным... Никто не забыт, ничто не забыто (с) ![]() |
|||
|
||||
JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Начал пробовать эту идею, однако эффект не тот немного...
Следующий код оставляет изменение мышиного курсора и возможность выделения текста, при этом рамочки фрейма перестают почему-то рисоваться... Наверное, не подойдёт. |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Гхм... Что это ещё за c-style касты? 0_о
А если так:
Это сообщение отредактировал(а) archimed7592 - 19.10.2007, 04:54 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
QWidget и есть.... попробуем-с... гм... static_cast<QPaintEvent*>(event) и иже с ним это правильно, но длинно, поэтому данные штуки я обычно пишу только в библиотечках... В обычном юзеркоде (как здесь) жалею символы... Возможно, я поменяю данное мнение. |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Всю конструкцию можно заменить этим:
Два в одном ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |