在Qt中组合工具栏和标题栏

时间:2013-05-22 01:10:17

标签: macos qt qt5

如何在顶部栏中实现工具栏,例如,Tiled是否已完成?

Tiled 通常,工具栏如下所示:

enter image description here

示例代码目前如何:

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);
    }
};

4 个答案:

答案 0 :(得分:6)

如果您仍在使用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

答案 1 :(得分:5)

如果您使用的是Qt5,请查看QtMacExtras http://qt.gitorious.org/qt/qtmacextras

您可以为您的QToolBar提供原生Mac外观     QtMacExtras :: setNativeToolBar

答案 2 :(得分:1)

如果您继承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::WindowStaysOnTopHint以及Qt::FramelessWindowHint,您应该可以让您的掩盖窗口小部件隐藏关节。

希望有所帮助。

答案 3 :(得分:0)

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

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