我已经成功地创建了一个QPushButton
应用程序的顶级窗口小部件/窗口,并尝试按下样式:
#include <QPushButton>
#include <QApplication>
class MyButton : public QPushButton
{
public:
MyButton() : QPushButton( "Button" )
{
setFixedSize( 250 , 65 );
setStyleSheet( "border-radius: 10px;" ); // style
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyButton b;
b.setWindowFlags( Qt::FramelessWindowHint | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint );
b.setAttribute(Qt::WA_TranslucentBackground); // Fixes opaque BG
b.show();
return a.exec();
}
不幸的是,如下图所示,应用样式时,按钮不再正确呈现。我很感激帮助让按钮正确渲染风格。
修改
按照Kuber Obas的回答,我很感激帮助设计窗口小部件的边缘,即圆角外的边缘,使其透明,如下所示
答案 0 :(得分:4)
在大多数原生样式中,使用本机功能使用按钮的其余部分绘制边框,并且不能逐个替换其元素。一旦你介绍了自己的样式,单片本机样式就消失了。因此,您需要替换本机样式提供的所有功能,包括边框,背景渐变等。如果您需要,您需要调整它以“匹配”原生样式。
在这里,您需要完全重新定义边框:至少提供笔(border:
)。半径只对笔有意义。您还需要重新定义背景,如果您关心背景,重新定义所有按钮的状态选择器等。您可以从一个没有样式的按钮开始!
下面的屏幕截图很好地展示了它。在左边你有一个Mac风格的原生按钮,在右边你有一个按钮,其边界重新定义。显然,在这种情况下,还应调整默认状态背景以匹配平台的背景,并且需要添加一些余量。
Qt并没有完全从头开始重新做现代原生风格,这就是为什么你不能调整他们各自的元素。这是太多的工作和不断变化的目标。它曾经是旧的Windows-95 / NT风格。从XP风格开始,决定让平台API提供视觉样式位图。类似的事情可能发生在OS X上。这也是你不能在其原生平台之外使用更高级的XP / Aqua / Mac Qt样式的原因:相关的原生API不存在,因此样式被禁用。
// https://github.com/KubaO/stackoverflown/tree/master/questions/styledbutton-20642553
#include <QPushButton>
#include <QHBoxLayout>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a{argc, argv};
QWidget w;
QHBoxLayout layout{&w};
QPushButton button1{"Default"};
button1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
layout.addWidget(&button1);
QPushButton button2{"Styled"};
button2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
button2.setStyleSheet(
"* { border: 2px solid #8f8f91; border-radius: 12px; background-color: #d02020; }"
"*:pressed { background-color: #f6f7fa; }");
layout.addWidget(&button2);
auto pal = w.palette();
pal.setBrush(QPalette::Background, Qt::darkBlue);
w.setPalette(pal);
w.show();
return a.exec();
}