Russian Qt Forum
Ноябрь 23, 2024, 20:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Делегат для QTableWidget  (Прочитано 4858 раз)
aliks-os
Гость
« : Октябрь 29, 2010, 09:18 »

Создал делегат для QTableWidget, основные процедуры приведены ниже
Код:
QWidget* BtnDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem& /* option */, const QModelIndex &/* index */) const {
    QWidget *editor = new QWidget(parent);
    QHBoxLayout *h  = new QHBoxLayout();
    QPushButton *btn = new QPushButton("...", editor);
    btn->setMaximumWidth(20);
    QLineEdit *dd = new QLineEdit(editor);
    dd->setStyleSheet("background-color: white; border-top-color: white; border-bottom-color: red;");
    h->addWidget(dd);
    h->addWidget(btn);
    h->setContentsMargins(0,0,0,0);
    h->setSpacing(0);
    editor->setLayout(h);
    QObject::connect(btn, SIGNAL(clicked()), this, SIGNAL( clicked() ) );

    dd->setFocus();
    dd->selectAll();

    return editor;
}

void BtnDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const {
    QString value = index.model()->data(index, Qt::EditRole).toString();
    QLineEdit *le = editor->findChild<QLineEdit *>();
    le->setText(value);

    le->setFocus();
    le->selectAll();
}

Проблема в том, что при входе в режим редактирования, мне необходимо что фокус был в QLineEdit и весь текст, который находится в нем был выделен. Пробовал сделать через setFocus() и selectAll() но ничего не получилось
Записан
nitro2005
Гость
« Ответ #1 : Октябрь 29, 2010, 09:36 »

Сталкивался с такой проблемой, решал созданием потомка от QWidget, которому переопределял focusInEvent() и которому сразу давал нужных детей.
Но потом отказался от таких сложностей и извращений Улыбающийся

createEditor только создает виджет, но он еще не visible, поэтому фокуса на этот момент иметь не может.
« Последнее редактирование: Октябрь 29, 2010, 09:40 от nitro2005 » Записан
aliks-os
Гость
« Ответ #2 : Октябрь 29, 2010, 09:53 »

createEditor только создает виджет, но он еще не visible, поэтому фокуса на этот момент иметь не может.

Я знаю, туда вставил на всякий случай Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 29, 2010, 12:11 »

Не нужно выставлять фокус и выделять - Qt сам всё это сделает - достаточно выставить фокус прокси:
editor->setFocusProxy( dd )
Записан

Qt 5.11/4.8.7 (X11/Win)
aliks-os
Гость
« Ответ #4 : Октябрь 29, 2010, 13:36 »

Спасибо! То что надо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.097 секунд. Запросов: 22.