Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aliks-os от Октябрь 29, 2010, 09:18



Название: Делегат для QTableWidget
Отправлено: 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() но ничего не получилось


Название: Re: Делегат для QTableWidget
Отправлено: nitro2005 от Октябрь 29, 2010, 09:36
Сталкивался с такой проблемой, решал созданием потомка от QWidget, которому переопределял focusInEvent() и которому сразу давал нужных детей.
Но потом отказался от таких сложностей и извращений :)

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


Название: Re: Делегат для QTableWidget
Отправлено: aliks-os от Октябрь 29, 2010, 09:53
createEditor только создает виджет, но он еще не visible, поэтому фокуса на этот момент иметь не может.

Я знаю, туда вставил на всякий случай :)


Название: Re: Делегат для QTableWidget
Отправлено: GreatSnake от Октябрь 29, 2010, 12:11
Не нужно выставлять фокус и выделять - Qt сам всё это сделает - достаточно выставить фокус прокси:
editor->setFocusProxy( dd )


Название: Re: Делегат для QTableWidget
Отправлено: aliks-os от Октябрь 29, 2010, 13:36
Спасибо! То что надо!