这是一个QML文件,它有一个Dial控件和一个自定义形状并排:
import QtQuick 2.9
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.3
import QtQuick.Window 2.2
import QtQuick.Shapes 1.0
Window {
id: window
visible: true
width: 400
height: 200
RowLayout {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
spacing: 5
Dial {
id: dial1
}
Control {
id: dial2
implicitWidth: dial1.width
implicitHeight: dial1.height
antialiasing: true
Shape {
anchors.fill: parent
antialiasing: true
ShapePath {
strokeWidth: 1
strokeColor: dial2.visualFocus ? dial2.palette.highlight : dial2.palette.dark
startX: dial2.width/2
startY: 0
PathArc {
x: dial2.width/2
y: dial2.height
radiusX: dial2.width/2
radiusY: dial2.height/2
direction: PathArc.Clockwise
}
PathArc {
x: dial2.width/2
y: 0
radiusX: dial2.width/2
radiusY: dial2.height/2
direction: PathArc.Clockwise
}
}
}
}
}
}
由于在Control和Shape上都设置了antialiasing: true
,我希望路径看起来很平滑。然而,它看起来像是锯齿状:
我怎样才能改变形状?
答案 0 :(得分:7)
根据the blog post about QtQuick Shapes,您需要在整个场景或QtQuick图层上启用多重采样。
您似乎正在使用QQmlApplicationEngine,在这种情况下,您只需在main.cpp中设置默认的表面格式:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QSurfaceFormat format;
format.setSamples(8);
QSurfaceFormat::setDefaultFormat(format);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
或者,如果您希望将此设置限制为单个QtQuick图层,您还可以设置样本数量,如下所示:
import QtQuick 2.8
import QtQuick.Window 2.2
import QtQuick.Shapes 1.0
Window {
visible: true
width: 640
height: 480
Item {
id: root
anchors.fill: parent
layer.enabled: true
layer.samples: 4
// your shapes here ...
}
}
对于我而言,在图层上设置它似乎已被打破vendorExtensionsEnabled: true
,这是默认设置。将其设置为false
似乎有效。
答案 1 :(得分:0)
你试过顺利吗?我会检查,但我目前正在使用Qt 4.8进行项目,并且没有加载5.x来为我自己尝试。