Macos 在Qt中创建胶囊样式工具栏控件
在Qt应用程序中渲染(包括按钮下方的标签文本)的最佳方式是什么 至于渲染按钮,我希望尽可能多地利用Mac OS提供的功能。(我不是Mac开发者,所以不知道它是否有API)。我知道我可以自己画,用样式表来边框图像,猜字体,并且把它们全部放在布局中,但是当MAC更新她的“外观和感觉”时,有没有更好的方法来保证一致的演示?我在C++中使用C++。 我并不讨厌使用Q_WS_MAC来获得特定于平台的渲染,但是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
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();
}
我写了一篇关于如何创建自定义小部件的简短教程:
也许这会有帮助。我过去也做过类似的事情。不幸的是,我没有它的源代码与您分享。然而,最安全的赌注是使用。它们支持各种属性、伪状态和子角色,从而可以在任何程度上自定义外观