【问题标题】:How do I draw the close, minimize, and maximize buttons in Qt?如何在 Qt 中绘制关闭、最小化和最大化按钮?
【发布时间】:2012-12-09 13:34:23
【问题描述】:

我创建了一个this->setWindowFlags(Qt::FramelessWindowHint);,所以没有标题栏。因此,我正在实施我自己的。然而,在我继续之前,我想知道是否有一种标准方法可以以本机操作系统的方式添加关闭、最小化和最大化按钮(即在 Windows 上它应该看起来像 Windows 关闭按钮,对于 osx和 linux)。

【问题讨论】:

  • 您已经取消了使用无框窗口来获得具有原生外观的按钮的选项。在 Qt 中没有绘制它们的功能,您必须自己绘制它们。当你这样做时,通常让它们看起来像原生按钮。
  • @HansPassant 我想创建一个像 Chrome 一样的标签系统。但是,就像 chrome 一样,我希望按钮看起来是操作系统原生的。
  • 啊,是的,当你有 150 名程序员在开发一个产品时,你可以做的好事。
  • 至少在 Mac OS X 上,Google Chrome 实际上是移动标准窗口控件,而不是省略它们。 (它以一种完全不可移植的、特定于操作系统的方式这样做。)

标签: c++ qt


【解决方案1】:

QStyle 采用了很多基于操作系统风格的标准图标。您可以从当前操作系统样式中获取此图标,然后自行绘制。

这是一个简单的实现,供参考。

class TitleBar : public QWidget
{
    Q_OBJECT
public:
    explicit TitleBar(QWidget *parent = 0)
        :QWidget(parent)
    {
        QStyle *style = qApp->style();
        QIcon closeIcon = style->standardIcon(QStyle::SP_TitleBarCloseButton);
        QIcon maxIcon = style->standardIcon(QStyle::SP_TitleBarMaxButton);
        QIcon minIcon = style->standardIcon(QStyle::SP_TitleBarMinButton);

        QPushButton *min = new QPushButton(this);
        QPushButton *max = new QPushButton(this);
        QPushButton *close = new QPushButton(this);
        min->setIcon(minIcon);
        max->setIcon(maxIcon);
        close->setIcon(closeIcon);

        QHBoxLayout *layout = new QHBoxLayout(this);
        layout->setSpacing(0);
        layout->addWidget(min);
        layout->addWidget(max);
        layout->addWidget(close);
        setLayout(layout);
    }
};

【讨论】:

  • 奇怪的是,这并没有达到我的预期:在 OSX 上,按钮看起来与 Windows 上的完全一样...
  • QMacStyle 未在 Qt 开源版本 4.6.2 中实现。不知道其他版本怎么样。你可以自己实现QMacStyle
  • 嗯,正是我需要的。将不得不对此进行测试
猜你喜欢
  • 2011-03-13
  • 2016-03-04
  • 2016-10-04
  • 1970-01-01
  • 2013-04-17
  • 2016-05-17
  • 2012-12-16
  • 1970-01-01
  • 2017-01-07
相关资源
最近更新 更多