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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать кнопку с закрытием?  (Прочитано 2251 раз)
evgeniy
Гость
« : Март 26, 2014, 16:58 »

То есть что-то вроде closable tab в QTabBar. Сделал так:
Код:
BtnWithClosing::BtnWithClosing(QWidget *parent): QFrame(parent) {
  QHBoxLayout *layout = new QHBoxLayout;
  layout->setMargin(4);
  layout->setSpacing(0);
  layout->setSizeConstraint(QLayout::SetMaximumSize);
  setStyleSheet("...");
  QPushButton *btnOk = new QPushButton(":/images/saveandexit.png");
  QPushButton *btnClose = new QPushButton(QIcon(":/images/closebtnover.png"), "");
  btnClose->setStyleSheet("...");
  btnOk->setStyleSheet("...");
  layout->addWidget(btnOk);
  layout->addWidget(btnClose);
  setLayout(layout);
}

Но некрасиво получается: 1. не могу заполнить frame кнопками полностью. 2 Хочется чтобы кнопка закрытия была маленькая и круглая.
Вижу только один выход: брать QPushButton, рисовать на ней иконку и отслеживать события мыши. Как это делать? Ссылки приветствуются. Заранее благодарен!
Записан
Bepec
Гость
« Ответ #1 : Март 26, 2014, 18:13 »

PaintEvent, mouseEvent и наследование от виджета = любая вам доступная в воображении картинка, реагирующая на нажатия,  в любом месте вашего виджета. Справка = Assistent.
Записан
evgeniy
Гость
« Ответ #2 : Март 26, 2014, 19:16 »

Готово!

Код:
BtnWithClosing::BtnWithClosing(QString txt, QWidget *parent):
QPushButton(txt, parent) {
  QHBoxLayout *layout = new QHBoxLayout;
  layout->setMargin(4);
  layout->setSpacing(0);
  layout->setSizeConstraint(QLayout::SetMaximumSize);
  setText(text() + "    "); // for close button space
  QPushButton *btnClose = new QPushButton;
  btnClose->setStyleSheet("QPushButton:hover {image:"
    "url(:/images/closebtnover.png);}"
    "QPushButton {image: url(:/images/closebtn.png); margin-right: -9;"
    "margin-left: -6; min-width: 0; background-color: transparent;"
    "min-height: 0; border-width: 0px; border-radius: 9px; padding: 0px;}");
  layout->addWidget(btnClose, 0, Qt::AlignRight);
  setLayout(layout);
}
Записан
Bepec
Гость
« Ответ #3 : Март 26, 2014, 19:20 »

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


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