Я объясню, как получить его структуру, но я оставлю его вам, чтобы создать все и подключить сигналы.
Лучше всего было бы создать свой собственный класс QWidget
, называемый чем-то вроде «TitleBar» и дать ему QHBoxLayout
. В классе «TitleBar» создайте еще QWidget
и QHBoxLayout
, чтобы они содержали кнопки. Создайте 3 QPushButtons
и добавьте их в него. Затем вам нужно создать свой собственный класс QMenuBar
, который называется «MenuBar», чтобы вы могли получать события мыши и создавать механизм перетаскивания. Ниже приведен пример кода того, как вы можете это сделать.
TitleBar
TitleBar::TitleBar() :
QWidget()
{
QHBoxLayout *l = new QHBoxLayout();
l->setContentsMargins(0, 0, 0, 0);
setLayout(l);
QWidget *buttonGroup = new QWidget();
QHBoxLayout *buttonLayout = new QHBoxLayout();
buttonLayout->setContentsMargins(0, 0, 0, 0);
QPushButton *minButton = new QPushButton("");
QPushButton *maxButton = new QPushButton("");
QPushButton *closeButton = new QPushButton("");
buttonLayout->addWidget(minButton, Qt::AlignRight);
buttonLayout->addWidget(maxButton, Qt::AlignRight);
buttonLayout->addWidget(closeButton, Qt::AlignRight);
buttonGroup->setLayout(buttonLayout);
buttonGroup->setFixedSize(buttonGroup->sizeHint());
MenuBar *bar = new MenuBar();
bar->addMenu("&File");
l->addWidget(bar);
l->addWidget(buttonGroup);
}
MenuBar
void MenuBar::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() == Qt::LeftButton)
{
QPointF newPos = (event->localPos() - dragPos) + window()->pos();
window()->move(newPos.x(), newPos.y());
}
else
QMenuBar::mouseMoveEvent(event);
}
void MenuBar::mousePressEvent(QMouseEvent *event)
{
dragPos = event->localPos();
QMenuBar::mousePressEvent(event);
}
Вы можете просто добавить класс «Titlebar» к вашему основному макету вашего виджета с верхним выравниванием и вы все хорошо! Теперь это не идеально, но я думаю, что он выполняет свою работу.
Вот пример проекта, который использует этот метод: http://www.filedropper.com/menubartest
возможно дубликат [Объединить панель инструментов и строку заголовка в Qt] (http://stackoverflow.com/questions/16681965/combine-toolbar-and-title- bar-in-qt) – tux3
Я не думаю, что это дубликат этого. Этот вопрос для Mac, и это для Windows из того, что я читал. –
@ user3734823, вы говорите о «Windows», «Windows» или «Window's»? Надеюсь, я неправильно это отредактировал. Возможно, вы захотите добавить «в Windows» к названию, если это так. –