【问题标题】:How to display fix banner between QMenubar and QToolBar in QMainWindow如何在 QMainWindow 中的 QMenubar 和 QToolBar 之间显示修复横幅
【发布时间】:2013-09-04 21:22:49
【问题描述】:

如何在两者之间显示固定横幅(带有一些小部件,如 label 和 button ) QMenuBar 和 QToolBar ? 与 QStatusBar 类似,但在 QMenuBar 和 QToolBar 之间。 我尝试使用 QToolBar 来实现。

 // toolbar Banner with lable inside it.
 QLabel * bannerLabel = new QLabel(" bannerToobar with label banner.");
 bannerLabel->setAlignment( Qt::AlignVCenter );
 ui.bannerToobar->addWidget( bannerLabel );
 ui.bannerToobar->setAllowedAreas(Qt::ToolBarArea::TopToolBarArea);
 ui.bannerToobar->setMovable( false );


 QSize banner_sz = ui.bannerToobar->size();
 ui.bannerToobar->setFixedHeight( banner_sz.height() * 2 );
 QSizePolicy banner_szPolicy( QSizePolicy::Policy::Maximum,  QSizePolicy::Policy::Fixed );

 banner_szPolicy.setHorizontalStretch(255);
 ui.bannerToobar->setSizePolicy( banner_szPolicy );

但我不能阻止用户拖动 mainToolbar 并放在与我相同的行中 横幅工具栏

【问题讨论】:

    标签: qt


    【解决方案1】:

    您可以使用QMainWindow::addToolBarBreak 强制它最初换行,但我不知道有什么方法可以防止用户稍后将其放回原处(使工具栏不可移动除外)。

    如果有一个 QToolbar::dockLocationChanged 信号(这似乎已在https://bugreports.qt-project.org/browse/QTBUG-1274 中被请求和解决,但我仍然没有在任何地方看到该信号),我想你可以在任何时候使用 insertToolBarBreak 来修复它已经改变。当工具栏移动时,也许有一些骇人听闻的方式可以让您收到通知。

    或者您可以使用 QMainWindow::setMenuWidget 将包含 QMenuBar 和其他内容的小部件放入 QMainWindow 的菜单区域。如果您想支持菜单栏从窗口提升到屏幕顶部并且工具栏与窗口标题装饰统一的样式(mac/gnome/etc),这可能会变得很棘手。但是在菜单栏和工具栏之间设置横幅的想法在这种情况下自然会出现问题:-)

    【讨论】:

    • 谢谢,@puetzk 我将使用 setMenuWidget,因为到目前为止我的应用程序仅适用于 Windows。
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多