Название: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 17:35 Здравствуйте!
Имею на форме объект класса QTextEdit. Нужно в определенные моменты блокировать его так, чтобы редактирование содержимого текста было невозможно. Это я могу сделать через метод setReadOnly(true) или через setTextInteractionFlags(Qt::TextBrowserInteraction) но при этом визуально невидно, что текст заблокирован для редактирования. А хотелось бы, чтобы поле редактирования ну хотя бы серым становилось. Я, конечно, могу дополнительно устанавливать цвет через textBackgroundColor(), но может быть я просто не нашел нужного метода. Метод setEnabled(false) не подходит - он цветом показывает, что поле неактивно, но и не дает выделять и копировать текст в буфер обмена. А использовать textBackgroundColor() считаю несовсем корректным, ибо если у кого-то будет настроена "серая" тема, то при совпадении цвета пользователь просто не увидит что поле заблокировано. Что делать? Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 18:47 Откопал вроде, надо пользоваться палитрами. Пока ниасилил чтоэтоза.
Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 20:15 Щит, не могу понять, почему нельзя создать объект класса QStyle?
Код: #include <QStyle> вызывает ошибку Код: src/editor.cpp:196: ошибка: cannot declare variable 'standart_style' to be of abstract type 'QStyle' ? Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: BRE от Январь 12, 2009, 20:33 Потому что QStyle абстрактный класс и поэтому некоторые функции будут реализованы только в классах-потомках.
Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: ритт от Январь 12, 2009, 21:05 >> because the following virtual functions are pure...
Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: break от Январь 12, 2009, 21:07 Для того чтобы элементы на виджете были неактивны и серенькие - но можно было бы скопировать текст из edit-ов в буфер обмена пользовался вот такой штукой:
Код: void setNonEditMode( QWidget& Widget , bool bNonEditMode ) но наверняка можно и по другому. Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 21:13 Вспоминается анекдот "слабо гандон на глобус натянуть"?
Сделал задание цвета через QPalette, но это тоже некомильфо, потому что цвет всеравно задаю в явном виде. А нужно, говоря человеческим языком, взять стиль элемента, которым он отрисовывается в "неактивном" состоянии, и заменить этим стилем стиль, который используется в нормальном виде. В комбинации с блокировкой редактирования, получится то что нужно. Осталось понять, как взять стиль неактивного элемента, и натянуть его на стиль активного. Просветления нет. Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: Rcus от Январь 12, 2009, 21:22 Код Топорно, но почти работает (на самом деле надо цвета всего нескольких ролей переписать) Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 21:27 Сделал наконец франкенштейна.
Код
Одно плохо, в стандартных настройках обычный фон редактирования - серый, а неактивный - белый. Белый более яркий, и становится непонятно, почему на белом фоне редактирование невозможно. По-хорошему должно быть наоборот. Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 21:37 Придумал, цвет неактивного поля QTextEdit беру от QPalette::Window. Тогда цвет текстового поля становится равным цвету окружающего окна, и сразу понятно что поле неактивно.
Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: SABROG от Январь 12, 2009, 22:00 Вот так всегда, промучаешься паралельно с другими, а кто-нибудь первее решение выложит :)
Код: QPalette pal = ui.textEdit->palette(); Название: Re: Как показать, что QTextEdit заблокирован для редактирования. Отправлено: xintrea от Январь 12, 2009, 22:08 Вот так всегда, промучаешься паралельно с другими, а кто-нибудь первее решение выложит :) Понял тебя, избавился от статических переменных. |