Russian Qt Forum

Qt => Вопросы новичков => Тема начата: BulSV от Август 30, 2012, 10:19



Название: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 10:19
Собственно вопрос темы и есть сообщение.

Как убрать выделение текста в QSpinBox?
Код:
spinbox->lineEdit()->deselect();

    - не проходит, как писали для QDoubleSpinBox (и для него тоже)
http://www.prog.org.ru/index.php?topic=18950.msg127719#msg127719 (http://www.prog.org.ru/index.php?topic=18950.msg127719#msg127719).


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: virtual_root от Август 30, 2012, 14:55
я делала так: в свойствах палитры этого компонента(прям на форме в дизайнере) параметру HighlightedText выставляла белый цвет вместо синего, и выделения не видно)


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 15:39
я делала так: в свойствах палитры этого компонента(прям на форме в дизайнере) параметру HighlightedText выставляла белый цвет вместо синего, и выделения не видно)

Мне нужно, чтобы при переходе фокуса с spinbox-а с него снималось выделение. Просто я управляю спинбоксом с помощью 2-х кнопок (при нажатии и удержании одной из них более 3 секунд, удваивается скорость прокрутки спинбокса, а при отпускании кнопки - подаётся сигнал для записи значения спинбокса в мультикарту). И вот тут при переходе, например, на другой (такой же) спинбок, на старом выделение остаётся  :-\. Спинбоксами нужно управлять кнопками и как обычно (по умолчанию). Только с кнопками происходит запись, а как по умолчанию - без неё. Поэтому убрать заливку синим при выделении - не желательно (не видно будет при обычном редактировании значений).


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 17:07
Вот ответ - наследовался от QSpinBox (тему можно закрывать, если нет других вариантов :( ):

Код:
#ifndef SPINBOX_H
#define SPINBOX_H

#include <QSpinBox>
#include <QLineEdit>

class spinBox : public QSpinBox
{
    Q_OBJECT
    QLineEdit *le;
public:
    explicit spinBox(QWidget *parent = 0);
   
signals:
   
public slots:
    void deselectSB();
   
};

#endif // SPINBOX_H

Код:
#include "spinbox.h"

spinBox::spinBox(QWidget *parent)
    : QSpinBox(parent)
    , le(new QLineEdit(this))
{   
    this->setLineEdit(le);
}

void spinBox::deselectSB()
{
//    this->setStyleSheet("selection-background-color: rgba(0, 0, 0, 0%); selection-color: black");
//    это для "выделения не видно". Но оно мне не подошло.
    le->deselect();
}


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: mutineer от Август 30, 2012, 17:12
А зачем ставить свой lineEdit, а не использовать тот, который уже есть в QSpinBox?


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 17:25
А зачем ставить свой lineEdit, а не использовать тот, который уже есть в QSpinBox?

У меня не получилось  :(
Может я не так делал? Можно пример, как это сделать?


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: mutineer от Август 30, 2012, 17:27
le->deselect();
заменить на
lineEdit()->deselect();

А как ты делал, что не получилось?


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 18:34
le->deselect();
заменить на
lineEdit()->deselect();

А как ты делал, что не получилось?

Так тоже делал, только без #include <QLineEdit>, а с ним получилось и без своего lineEdit-а :D


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: BulSV от Август 30, 2012, 20:06
А ещё лучше сделать так:
Код:
void spinBox::deselectSB()
{
    lineEdit()->setFocus(Qt::MouseFocusReason);
}

А то курсор оставался, когда нажимал кнопку другого спинбокса. Но сейчас, и выделение снимается, и курсор пропадает - так же как и у стандартного спинбокса при переключении "родными" стрелочками  ;).


Название: Re: Как убрать выделение текста в QSpinBox?
Отправлено: lighting от Август 31, 2012, 09:19
я делала так: в свойствах палитры этого компонента(прям на форме в дизайнере) параметру HighlightedText выставляла белый цвет вместо синего, и выделения не видно)
не самое удачное решение, пользователь ведь может сменить тему оформления и белый цвету уже может не совпасть с цветом фона.