Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: evgeniy от Март 26, 2014, 16:58



Название: Как сделать кнопку с закрытием?
Отправлено: 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, рисовать на ней иконку и отслеживать события мыши. Как это делать? Ссылки приветствуются. Заранее благодарен!


Название: Re: Как сделать кнопку с закрытием?
Отправлено: Bepec от Март 26, 2014, 18:13
PaintEvent, mouseEvent и наследование от виджета = любая вам доступная в воображении картинка, реагирующая на нажатия,  в любом месте вашего виджета. Справка = Assistent.


Название: Re: Как сделать кнопку с закрытием?
Отправлено: evgeniy от Март 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);
}


Название: Re: Как сделать кнопку с закрытием?
Отправлено: Bepec от Март 26, 2014, 19:20
Молодец.