Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Григорий от Апрель 11, 2012, 09:02



Название: QTableWidget и Password
Отправлено: Григорий от Апрель 11, 2012, 09:02
Уважаемые форумчане, вопрос таков есть виджет QTableWidget с n количеством колонок, как сделать так чтобы одна из колонок отображалась в стиле Password(т.е текст в ячейке маскировался звездочками)...


Название: Re: QTableWidget и Password
Отправлено: Пантер от Апрель 11, 2012, 09:11
Использовать свой делегат.


Название: Re: QTableWidget и Password
Отправлено: Григорий от Апрель 11, 2012, 10:56
Использовать свой делегат.

а можете кратенький пример на setItemDelegateForColumn для моего случая с Password


Название: Re: QTableWidget и Password
Отправлено: GreatSnake от Апрель 11, 2012, 11:16
а можете кратенький пример на setItemDelegateForColumn для моего случая с Password
Теория (http://doc.crossplatform.ru/qt/4.7.x/html-qt/model-view-programming.html#delegate-classes).
+
QLineEdit::setEchoMode( QLineEdit::Password )


Название: Re: QTableWidget и Password
Отправлено: Григорий от Апрель 11, 2012, 11:59
Теория (http://doc.crossplatform.ru/qt/4.7.x/html-qt/model-view-programming.html#delegate-classes).
+
QLineEdit::setEchoMode( QLineEdit::Password )

Извиняюсь за тугодумие но помогите плиз , делаю так сначала вешаю делегат для колонки

Код:
Table->setItemDelegateForColumn(5,new PassDelegate());

далее описываю делегат

Код:
class PassDelegate : public QItemDelegate {
 public:
  void paint(QPainter* p,const QStyleOptionViewItem& o,const QModelIndex& i) const {}
};

а что в методе paint писать и куда там QLineEdit::setEchoMode( QLineEdit::Password ) крутить не пойму ((


Название: Re: QTableWidget и Password
Отправлено: GreatSnake от Апрель 11, 2012, 12:06
Упс, с QLineEdit::setEchoMode() я похоже погорячился - просмотрел, что ввод пароля не требуется.
Тебе достаточно будет перегрузить
Код
C++ (Qt)
QString QStyledItemDelegate::displayText ( const QVariant & value, const QLocale & locale ) const
в котором value.toString() поменять на '*'-ки.
Кстати, про сушествование QItemDelegate забудь и всегда используй QStyledItemDelegate.


Название: Re: QTableWidget и Password
Отправлено: Григорий от Апрель 11, 2012, 14:55
Упс, с QLineEdit::setEchoMode() я похоже погорячился - просмотрел, что ввод пароля не требуется.

Ну кажись разобрался, спасибо большое,

А если все таки нужно чтобы и в стандартном редакторе итема тоже ставились звездочки при вводе , что надо еще добавить?


Название: Re: QTableWidget и Password
Отправлено: GreatSnake от Апрель 11, 2012, 15:00
А если все таки нужно чтобы и в стандартном редакторе итема тоже ставились звездочки при вводе , что надо еще добавить?

Код
C++ (Qt)
QWidget* PassDelegate::createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
    QLineEdit* le = new QLineEdit( parent );
    le->setEchoMode( QLineEdit::Password );
    return le;
}


Название: Re: QTableWidget и Password
Отправлено: Григорий от Апрель 11, 2012, 15:09
Все вопрос закрыт, всем огромное спасибо ))