如何在Qt中绘制关闭,最小化和最大化按钮?

时间:2012-12-22 01:10:07

标签: c++ qt

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

1 个答案:

答案 0 :(得分:6)

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