Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Декабрь 05, 2014, 12:08



Название: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 12:08
Скажите ,  а можно настроить объект класса QSpinBox
чтобы там значения отображались в hex-формате?


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 12:22
hex - это ты 16 ричку назвал? Тогда setDisplayIntegerBase в 5 Кьюте. В 4 можно получить lineEdit() и с ним поработать.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 12:44
да только setLineEdit и LineEdit protected в QAbstractSpinBox

так просто и нельзя использовать
Код
C++ (Qt)
ui->spinBox->lineEdit();
 


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 12:46
Попробуй отнаследоваться и реализовать.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 12:50
Попробуй отнаследоваться и реализовать.

отнаследоваться от QAbstractSpinBox?


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 12:55
От QSpinBox.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 14:30
Сделал
Код
C++ (Qt)
 
SpinBox::SpinBox(QWidget*parent):
QSpinBox(parent)
{
 connect(this,SIGNAL(valueChange(int)),this,SLOT(setValueHex(int)));
}
 
void SpinBox::setValueHex(int value)
{
QLineEdit *le = lineEdit();
le->setText("0xFF");
}
 

жму на одну из кнопок для изменения значения
получается что меняется число и выводится 0xFF,
а после  при переходе на другой элемент 0xFF опять выводится число.

почему 0xFF не остается?

Надо какой-то Event перекрыть?




Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 14:33
Лови у лайнэдита текст ченджед.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 14:48
Ловлю

Код
C++ (Qt)
SpinBox::SpinBox(QWidget*parent):
QSpinBox(parent)
{
 le = lineEdit();
 connect(le,SIGNAL(textChange(QString)),this,SLOT(setValueHex(QString)));
 connect(this,SIGNAL(valueChange(int)),this,SLOT(setValueHex1(int)));
 
}
 
void SpinBox::setValueHex(QString value)
{
QLineEdit *le = lineEdit();
le->setText("0xFF");
}
 
void SpinBox::setValueHex1(int value)
{
QLineEdit *le = lineEdit();
le->setText("0xFF");
}
 
 
 

или не ловлю???

Но при переходе на другой виджет 0xFF меняется на цифру


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 14:58
Даже хз, надо самому копаться, а времени нет. Можно еще наследника лайнэдита сделать и установить его для спинбокса, а в нем уже полученное значение отображать как надо. Но что-то у меня такое ощущение, что можно это проще сделать.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 15:01
Сейчас попробую сделать.
Спасибо


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 15:08
Мля, чуйства не подвели:
Код:
virtual QString 	textFromValue ( int value ) const
virtual int valueFromText ( const QString & text ) const


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 05, 2014, 15:55
Спсб

сделал вот так:

Код
C++ (Qt)
QString MySpinBox::textFromValue(int val) const{
QString str = QVariant(val).toString();
if(val<16){
  return "0x0" + str.number(val,16);
}
return "0x" + str.number(val,16);
}
 
int SpinBox::valueFromText(const QString &text) const {
return text.toInt();
}
 
 

Только к сожалению в текстовом формате нельзя вводить буквенные символы.


Название: Re: QSpinBox
Отправлено: Пантер от Декабрь 05, 2014, 15:58
Хрень. :) Юзай QString::arg, там можно указать и систему счисления и заполнение нулями.


Название: Re: QSpinBox
Отправлено: Vamireh от Декабрь 07, 2014, 12:47
У Бланшета в книге был именно такой пример.


Название: Re: QSpinBox
Отправлено: demaker от Декабрь 08, 2014, 11:25
Да сделал как в Бланшет.
Только опять почему нельзя вводить текст в SpinBox?