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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Строка ввода с кнопками (line edit with buttons)  (Прочитано 6120 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Январь 12, 2014, 04:20 »

Простенькая реализация строки ввода с кнопками Улыбающийся
Этот виджет просто хранит кнопки Улыбающийся

Код
C++ (Qt)
class FadLineEdit : public QLineEdit
{
   Q_OBJECT
 
public:
   enum Side { None, Left, Right };
 
public:
   FadLineEdit( QWidget * parent = 0 );
 
   void addButton( QAbstractButton * button, Side side = Right );
   QAbstractButton * removeButton( QAbstractButton * button, Side side = Right );
 
   QList < QAbstractButton * > * leftSideButtons();
   QList < QAbstractButton * > * rightSideButtons();
 
   Side sideButton( QAbstractButton * button );
 
private:
   void refreshTextMargins();
 
protected:
   QList < QAbstractButton * > d_leftSideButtons;
   QList < QAbstractButton * > d_rightSideButtons;
 
   QHBoxLayout leftSideLayout;
   QHBoxLayout rightSideLayout;
};
 
Код
C++ (Qt)
/// PUBLIC
FadLineEdit::FadLineEdit( QWidget * parent )
   : QLineEdit( parent )
{
   QHBoxLayout * mainLayout = new QHBoxLayout();
   setLayout( mainLayout );
 
   leftSideLayout.addStretch();
   rightSideLayout.addStretch();
 
   leftSideLayout.setSpacing( 0 );
   leftSideLayout.setContentsMargins( 0, 0, 0, 0 );
 
   rightSideLayout.setSpacing( 0 );
   rightSideLayout.setContentsMargins( 0, 0, 0, 0 );
 
   mainLayout->setSpacing( 0 );
   mainLayout->setMargin( 0 );
   mainLayout->addLayout( &leftSideLayout );
   mainLayout->addLayout( &rightSideLayout );
}
 
void FadLineEdit::addButton( QAbstractButton * button, Side side )
{
   if ( side == Right )
   {
       d_rightSideButtons << button;
       rightSideLayout.insertWidget( d_rightSideButtons.size(), button, 0, Qt::AlignRight | Qt::AlignCenter );
 
   } else
   {
       d_leftSideButtons << button;
       leftSideLayout.insertWidget( 0, button, 0, Qt::AlignLeft | Qt::AlignCenter );
   }
 
   refreshTextMargins();
}
QAbstractButton * FadLineEdit::removeButton( QAbstractButton * button, Side side )
{
   if ( side == Right )
   {
       if ( d_rightSideButtons.removeOne( button ) )
       {
           rightSideLayout.removeWidget( button );
           button->setParent( 0 );
 
       } else
           return 0;
 
   } else
   {
       if ( d_rightSideButtons.removeOne( button ) )
       {
           leftSideLayout.removeWidget( button );
           button->setParent( 0 );
 
       } else
           return 0;
   }
 
   refreshTextMargins();
   return button;
}
 
QList < QAbstractButton * > * FadLineEdit::leftSideButtons()
{
   return &d_leftSideButtons;
}
QList < QAbstractButton * > * FadLineEdit::rightSideButtons()
{
   return &d_rightSideButtons;
}
 
FadLineEdit::Side FadLineEdit::sideButton( QAbstractButton * button )
{
   Side side = None;
 
   if ( d_leftSideButtons.indexOf( button ) != -1 )
       side = Left;
 
   else if ( d_rightSideButtons.indexOf( button ) != -1 )
       side = Right;
 
   return side;
}
 
/// PRIVATE
void FadLineEdit::refreshTextMargins()
{
   QMargins margins = textMargins();
 
   if ( !d_leftSideButtons.isEmpty() )
       margins.setLeft( leftSideLayout.sizeHint().width() );
 
   if ( !d_rightSideButtons.isEmpty() )
       margins.setRight( rightSideLayout.sizeHint().width() );
 
   setTextMargins( margins );
}
 
« Последнее редактирование: Январь 12, 2014, 15:00 от gil9red » Записан

Bepec
Гость
« Ответ #1 : Январь 12, 2014, 09:18 »

Маленькая просьба. Если можно прикреплять картинку получившегося компонента Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Январь 12, 2014, 12:50 »

Fad — твое ФИО? его обычно капсом пишут.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #3 : Январь 12, 2014, 13:28 »

Я думаю сокращение псевдонима или же комплекс причудливых виджетов Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Январь 12, 2014, 15:01 »

Маленькая просьба. Если можно прикреплять картинку получившегося компонента Улыбающийся
ок Улыбающийся

Fad — твое ФИО? его обычно капсом пишут.
После классов креатора, которые все "fancy", свой захотелось так назвать Улыбающийся
Записан

Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Июнь 02, 2015, 18:09 »

некрасиво смотрится кнопка с минусом.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Июнь 02, 2015, 19:57 »

некрасиво смотрится кнопка с минусом.

Дать кнопке иконку, которую хочется Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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