Russian Qt Forum Май 28, 2014, 05:02 Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Вам не пришло письмо с кодом активации? 1 час 1 день 1 неделя 1 месяц Навсегда Войти НАЧАЛО ФОРУМ WIKI (ВИКИ) FAQ ПОМОЩЬ ПОИСК ВОЙТИ РЕГИСТРАЦИЯ Russian Qt Forum > Forum > Qt > Model-View (MV) (Модератор: Sergeich) > как вставить в ячейку QTableWidget отображение password (буква заменена *)? Страниц: [1] 2 Вниз « предыдущая тема следующая тема » ПЕЧАТЬ Автор Тема: как вставить в ячейку QTableWidget отображение password (буква заменена *)? (Прочитано 4348 раз) neosapient Самовар Offline Сообщений: 150 как вставить в ячейку QTableWidget отображение password (буква заменена *)? « : Март 18, 2009, 15:38 » Здравствуйте, есть таблица QTableWidget. Как сделать так, чтобы в одном из столбцов отображались звездочки вместо букв? Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 Rcus Гость Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #1 : Март 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 ) Записан neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #2 : Март 18, 2009, 16:50 » Пожалуйста, уточните ваш совет. Попробовал, как вы сказали, теперь у меня звездочками затирается содержимое ячейки. Вопрос, как сохранить строку, и при этом отображать звездочки вместо букв в QTableWidget ? Пока, у меня примерно следующее Код: QxMainDialog::QxMainDialog() { connect(TableParam, SIGNAL(itemChanged(QTableWidgetItem *)),this,SLOT(itemChanged(QTableWidgetItem *))); } ... void QxMainDialog::itemChanged ( QTableWidgetItem * item ) { if(item->column()==3){ // выбираю третий столбец QString localbuf = item->text(); qDebug() << localbuf; item->setData ( Qt::DisplayRole, QString::QString ( localbuf.size(), '*' ) ); } } Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 pastor Administrator Джедай : наставник для всех Offline Сообщений: 2898 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #3 : Март 18, 2009, 17:14 » Можно создать свой делегат на базе QItemDelegate, переопределить createEditor. В этом методе создать "редактор" из QLineEdit и для него утсановить Echo Mode QLineEdit::Password. Далее, устновить полученный делегат нужной колонке при помощи setItemDelegateForColumn. Подробнее как созадть делегат читай в ассистанте раздел Delegate Classes Записан Integrated Computer Solutions, Inc. (ICS) http://www.ics.com/ neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #4 : Март 26, 2009, 13:21 » Попробовал реализовать через делегат. Получилось вот То есть, когда модифицируешь текст, символы подменяются, а вот в режиме просмотра символы НЕ подменяются. Код: TrackDelegate::TrackDelegate(int durationColumn, QObject *parent) : QItemDelegate(parent) { this->durationColumn = durationColumn; } QWidget *TrackDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == durationColumn) { QLineEdit *lineEdit = new QLineEdit(parent); lineEdit->setEchoMode(QLineEdit::Password); return lineEdit; } else { return QItemDelegate::createEditor(parent, option, index); } } Как я понимаю, надо подменить функцию paint, но что в её теле писать не представляю. Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 spirit Гость Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #5 : Март 26, 2009, 13:22 » так переопределите QItemDelegate::drawDisplay, что бы выводились "*". Записан neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #6 : Март 26, 2009, 14:03 » Если переопределить QItemDelegate::drawDisplay, то '*' заменятся все поля Если переопределить QItemDelegate::paint, то '*' заменятся только второй столбец, как и требуется. Код: void TrackDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == durationColumn) { QString text = index.model()->data(index, Qt::DisplayRole).toString(); QString buf(text.size(),'*'); drawDisplay(painter, option, option.rect, buf); drawFocus(painter, option, option.rect); } else{ QItemDelegate::paint(painter, option, index); } } Хочется, чтобы всё было единообразно, и буквы подменялись черными кружками. Как мне это сделать ? Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 pastor Administrator Джедай : наставник для всех Offline Сообщений: 2898 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #7 : Март 26, 2009, 14:10 » А если так попробывать: Код C++ (Qt) void TrackDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == durationColumn) { QString text = index.model()->data(index, Qt::DisplayRole).toString(); QLineEdit edit; edit.setText(text); edit.setEchoMode(QLineEdit::Password); drawDisplay(painter, option, option.rect, edit.displayText()); drawFocus(painter, option, option.rect); } else{ QItemDelegate::paint(painter, option, index); } } Записан Integrated Computer Solutions, Inc. (ICS) http://www.ics.com/ spirit Гость Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #8 : Март 26, 2009, 14:11 » в QItemDelegate::paint анализировать колонку и вызывать нативный QItemDelegate::drawDisplay или же свой. Записан neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #9 : Март 26, 2009, 14:38 » Цитата: pastor от Март 26, 2009, 14:10 А если так попробывать: Спасибо, всё получилось Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 pastor Administrator Джедай : наставник для всех Offline Сообщений: 2898 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #10 : Март 26, 2009, 15:03 » Отлично! Тогда QLineEdit edit; можно сделать членом класса TrackDelegate, чтобы постоянно не создавать\удалять объект edit. Записан Integrated Computer Solutions, Inc. (ICS) http://www.ics.com/ neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #11 : Март 26, 2009, 15:46 » Как я вас понял, вы предложили определить переменную QLineEdit edit; в классе TrackDelegate. но тут получается загвоздка с методами createEditor(...) const; и paint(...) const; так как они константные и не дают изменять значения переменной edit. Как Вы предлагаете решить сформулированную вами задачу ? Хочу посмотреть как правильно это можно оформить. Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 spirit Гость Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #12 : Март 26, 2009, 15:48 » Код C++ (Qt) ... private: mutable QLineEdit *lineEdit; ... Записан pastor Administrator Джедай : наставник для всех Offline Сообщений: 2898 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #13 : Март 26, 2009, 15:50 » Я предлагал вынести edit только из paint(...), чтобы исключить многокрантое создание\уничтожение объекта. createEditor(...) не трогайте. Записан Integrated Computer Solutions, Inc. (ICS) http://www.ics.com/ neosapient Самовар Offline Сообщений: 150 Re: как вставить в ячейку QTableWidget отображение password (буква заменена *)? « Ответ #14 : Март 26, 2009, 16:05 » Тогда так... Записан QT 4.6.2 / WinXP, Vista, Win7, WinCE6 / VC6,VC9 Страниц: [1] 2 Вверх ПЕЧАТЬ « предыдущая тема следующая тема » Перейти в: Пожалуйста, выберите назначение: ----------------------------- Qt ----------------------------- => Вопросы новичков => Уроки и статьи => Установка, сборка, отладка, тестирование => Общие вопросы => Пользовательский интерфейс (GUI) => Qt Quick => Model-View (MV) => Базы данных => Работа с сетью => Многопоточное программирование, процессы => Мультимедиа => 2D и 3D графика => Qt 3D => Печать => Интернационализация, локализация => QSS => XML => Qt Script, QtWebKit => ActiveX => Qt Embedded => Дополнительные компоненты => Кладовая готовых решений => Вклад сообщества в Qt => Qt-инструментарий ----------------------------- Программирование ----------------------------- => Общий => С/C++ => Python => Алгоритмы => Базы данных => Разработка игр ----------------------------- Компиляторы и платформы ----------------------------- => Linux => Windows => Mac OS X => Компиляторы ===> Visual C++ ----------------------------- Разное ----------------------------- => Новости ===> Новости Qt сообщества ===> Новости IT сферы => Говорилка => Юмор => Объявления => Архив ===> Программирование =====> Python ===> Веб программирование =====> PHP, PERL, CGI