【问题标题】:Combine toolbar and title bar in Qt在 Qt 中组合工具栏和标题栏
【发布时间】:2013-05-22 01:10:16
【问题描述】:

顶栏的工具栏怎么实现,比如Tiled搞定了吗?

通常,工具栏如下所示:

目前的示例代码:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr) {
        auto *tbar = new QToolBar();  
        tbar->addWidget(new QPushButton("Push Me"));
        this->addToolBar(tbar);
    }
};

【问题讨论】:

  • 为什么不看Tiled的源码?

标签: macos qt qt5


【解决方案1】:

如果你还在使用 Qt 4.x,你可以使用 QMainWindow 中包含的setUnifiedTitleAndToolBarOnMac(bool set) 函数:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr) {
        auto *tbar = new QToolBar();  
        tbar->addWidget(new QPushButton("Push Me"));
        this->addToolBar(tbar);
        this->setUnifiedTitleAndToolBarOnMac(true); // activate Mac-style toolbar
    }
};

另请参阅:https://qt-project.org/doc/qt-4.8/qmainwindow.html#unifiedTitleAndToolBarOnMac-prop

【讨论】:

  • 请不要发布仅链接的答案。链接可能是对答案的有用补充,但答案应该在没有链接的情况下可读。在您的情况下,它将不再包含任何信息。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
【解决方案2】:

如果您使用的是 Qt5,请查看QtMacExtras (https://github.com/qt/qtmacextras)

您可以使用 QtMacExtras::setNativeToolBar

【讨论】:

    【解决方案3】:

    如果您将 QMainWindow 和/或 QToolBar 子类化并更改它们加载/拥有的框架类型,您也许可以获得您想要的效果。

    http://qt-project.org/doc/qt-4.8/qframe.html#details

    http://qt-project.org/doc/qt-4.8/stylesheet-examples.html#customizing-qframe

    http://qt-project.org/doc/qt-4.8/stylesheet-customizing.html#the-box-model

    另一种可能实现此结果的方法,但有点 hacky,您可以将另一个颜色正确的无框小部件放在正在显示的部分框架上。使用Qt:ToolQt::WindowStaysOnTopHintQt::FramelessWindowHint,您应该能够让您的覆盖小部件隐藏关节。

    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      您可以尝试使用样式表移除框架边框。

      tbar->setStyleSheet("QToolBar { border: 0px }");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 2011-11-18
        相关资源
        最近更新 更多