Название: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 18, 2009, 15:38 Здравствуйте, есть таблица QTableWidget.
Как сделать так, чтобы в одном из столбцов отображались звездочки вместо букв? Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: Rcus от Март 18, 2009, 15:49 void QTableWidget::itemChanged ( QTableWidgetItem * item ) [signal]
void QTableWidgetItem::setData ( int role, const QVariant & value ) [virtual] Qt::ItemDataRole QString::QString ( int size, QChar ch ) Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 18, 2009, 16:50 Пожалуйста, уточните ваш совет.
Попробовал, как вы сказали, теперь у меня звездочками затирается содержимое ячейки. Вопрос, как сохранить строку, и при этом отображать звездочки вместо букв в QTableWidget ? Пока, у меня примерно следующее Код: QxMainDialog::QxMainDialog() Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 18, 2009, 17:14 Можно создать свой делегат на базе QItemDelegate, переопределить createEditor. В этом методе создать "редактор" из QLineEdit и для него утсановить Echo Mode QLineEdit::Password. Далее, устновить полученный делегат нужной колонке при помощи setItemDelegateForColumn. Подробнее как созадть делегат читай в ассистанте раздел Delegate Classes
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 13:21 Попробовал реализовать через делегат.
Получилось вот (http://pic.ipicture.ru/uploads/090326/Un1WKWyRhX.jpg) (http://ipicture.ru/) То есть, когда модифицируешь текст, символы подменяются, а вот в режиме просмотра символы НЕ подменяются. Код: TrackDelegate::TrackDelegate(int durationColumn, QObject *parent) Как я понимаю, надо подменить функцию paint, но что в её теле писать не представляю. Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: spirit от Март 26, 2009, 13:22 так переопределите QItemDelegate::drawDisplay, что бы выводились "*".
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 14:03 Если переопределить QItemDelegate::drawDisplay, то '*' заменятся все поля
(http://pic.ipicture.ru/uploads/090326/5Ssmi96WUo.jpg) (http://ipicture.ru/) Если переопределить QItemDelegate::paint, то '*' заменятся только второй столбец, как и требуется. (http://pic.ipicture.ru/uploads/090326/5ujqIfzfW3.jpg) (http://ipicture.ru/) Код: void TrackDelegate::paint(QPainter *painter, Хочется, чтобы всё было единообразно, и буквы подменялись черными кружками. Как мне это сделать ? Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 14:10 А если так попробывать:
Код
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: spirit от Март 26, 2009, 14:11 в QItemDelegate::paint анализировать колонку и вызывать нативный QItemDelegate::drawDisplay или же свой. :)
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 14:38 А если так попробывать: Спасибо, всё получилось(http://pic.ipicture.ru/uploads/090326/rWmS5ktRMZ.jpg) (http://ipicture.ru/) Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 15:03 Отлично!
Тогда QLineEdit edit; можно сделать членом класса TrackDelegate, чтобы постоянно не создавать\удалять объект edit. Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 15:46 Как я вас понял, вы предложили определить переменную QLineEdit edit; в классе TrackDelegate.
но тут получается загвоздка с методами createEditor(...) const; и paint(...) const; так как они константные и не дают изменять значения переменной edit. Как Вы предлагаете решить сформулированную вами задачу ? Хочу посмотреть как правильно это можно оформить. Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: spirit от Март 26, 2009, 15:48 Код
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 15:50 Я предлагал вынести edit только из paint(...), чтобы исключить многокрантое создание\уничтожение объекта. createEditor(...) не трогайте.
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 16:05 Тогда так...
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 16:08 Лучше так:
mutable QLineEdit *edit; .... edit = new QLineEdit(this); edit->setEchoMode(QLineEdit::Password); ... edit->setText(text); drawDisplay(painter, option, option.rect, edit->displayText()); Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: spirit от Март 26, 2009, 16:10 ага, так. только почему бы не хранить указатель и убрать инклуд #include <QLineEdit> из ашника?
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: spirit от Март 26, 2009, 16:10 @pastor, ну ты шустрый, блин. :)
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 16:20 Ну или так...
Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 16:24 Ну или так... ага, оно. А про hide я забыл ) Кстате, можешь смело писать edit = new QLineEdit(parent); вместо edit = new QLineEdit((QWidget *)parent); Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 16:32 Не могу, компилятор ругается на несоответствие типов QObject и QWidget.
Ещё раз спасибо! Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: pastor от Март 26, 2009, 16:37 А на какую строку ругается? Вот твой код:
Код
Проблем быть не должно если убрать (QWidget *) Название: Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? Отправлено: neosapient от Март 26, 2009, 16:38 Пересобрал, глюк исчез.
|