Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在Qt中创建胶囊样式工具栏控件_Macos_Qt_User Interface_Toolbar - Fatal编程技术网

Macos 在Qt中创建胶囊样式工具栏控件

Macos 在Qt中创建胶囊样式工具栏控件,macos,qt,user-interface,toolbar,Macos,Qt,User Interface,Toolbar,在Qt应用程序中渲染(包括按钮下方的标签文本)的最佳方式是什么 至于渲染按钮,我希望尽可能多地利用Mac OS提供的功能。(我不是Mac开发者,所以不知道它是否有API)。我知道我可以自己画,用样式表来边框图像,猜字体,并且把它们全部放在布局中,但是当MAC更新她的“外观和感觉”时,有没有更好的方法来保证一致的演示?我在C++中使用C++。 我并不讨厌使用Q_WS_MAC来获得特定于平台的渲染,但是Qt已经有了任何相关的东西吗?你知道,一个setCapsuleStyle(true)methods

在Qt应用程序中渲染(包括按钮下方的标签文本)的最佳方式是什么

至于渲染按钮,我希望尽可能多地利用Mac OS提供的功能。(我不是Mac开发者,所以不知道它是否有API)。我知道我可以自己画,用样式表来边框图像,猜字体,并且把它们全部放在布局中,但是当MAC更新她的“外观和感觉”时,有没有更好的方法来保证一致的演示?我在C++中使用C++。 我并不讨厌使用Q_WS_MAC来获得特定于平台的渲染,但是Qt已经有了任何相关的东西吗?你知道,一个
setCapsuleStyle(true)
methodsomewhere?:)


感谢您的建议。

qt实验室存储库中有一个分段按钮示例,在KDE上看起来不错。它有相当多的
#ifdef Q_WS_MAC
代码,但我不知道它在MAC上的渲染效果如何。你可以找到它


如果专门针对Mac,则可以使用渲染本机分段按钮。它的学习曲线相当陡峭,所以你可能会发现这篇关于Mac widget的Qt实验室博客文章很有趣:。作者提供了三个Mac风格的小部件:qtcoaputton、qtcoacombobox和qtcoasegmentedbutton。

由于Qt本身不提供这种类型的小部件,最好的方法是对QPushButton进行子类化并重新实现
paintEvent
。然后,只需绘制包含胶囊按钮屏幕截图的QPixmap,即可绘制胶囊pixmap。您可以通过重新实现
mousePressEvent
mousereleasevent
来添加单击行为

// CapsuleButton.h
class CapsuleButton : public QPushPutton {
   // ...
protected:
   void paintEvent(QPaintEvent*);
   void mousePressEvent(QMouseEvent*);
   void mouseReleaseEvent(QMouseEvent*);
   // ...
private:
   QPixmap pixmap_;
   QPixmap pressedPixmap_;
   bool pressed_;
};

// CapsuleButton.cpp
CapsuleButton::CapsuleButton(QObject* parent) : 
    QPushButton(parent),
    pixmap_(":/capsule-button-background.png"),
    pressedPixmap_(":/capsule-button-background-pressed.png"),
    pressed_(false)
{ /*...*/ }

void CapsuleButton::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawPixmap(rect(), pressed_? pressedPixmap_ : pixmap_);
}

void CapsuleButton::mousePressEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton)
       pressed_ = true;
    update();
}

void CapsuleButton::mouseReleaseEvent(QMouseEvent*)
{
    pressed_ = false;
    update();
}
我写了一篇关于如何创建自定义小部件的简短教程:


也许这会有帮助。

我过去也做过类似的事情。不幸的是,我没有它的源代码与您分享。然而,最安全的赌注是使用。它们支持各种属性、伪状态和子角色,从而可以在任何程度上自定义外观