簡體   English   中英

Qt 中的預建形狀

[英]Pre-built shapes in Qt

正如標題所示,我嘗試使用預定義的形狀,但我沒有找到任何為此設計的模塊或 class,我認為 Qt 不提供這種可能性(我可能是錯的),一切都應該手工完成通過覆蓋paintEvent function,所以我決定創建自己的形狀(一條線),問題是當我應用setRenderHint方法時它不能正確顯示:


// x1  y1  x2  y2 : are integers that change according to the geometry of the parent (QWidget)

void Line::paintEvent(QPaintEvent*)
{
   QPainter shape(this);

   shape.setRenderHint(QPainter::Antialiasing); // <== Here

   QPen pen(Qt::black);
   forme.setPen(pen);

   shape.drawLine(x1,y1,x2,y2);
}

如果我刪除此功能,形狀看起來很難看(在對角線中),如果我保留它,繪制的線條會顯示漸變:

圖片 :

另一個問題是我每次都必須根據我的小部件的幾何形狀計算線條的定位。


所以我的問題是:是否可以創建不依賴於paintEvent function 的形狀? 否則,是否有任何提供預建形狀的外部庫?

您可能應該使用 QML 而不是小部件。 對於您描述的問題,這似乎很自然。 QML 提供了一個組件Shape ,可以輕松方便地渲染不同的形狀。 創建一個並添加ShapePath子項以呈現實際形狀。

Qt 本身不提供大量的形狀(僅矩形、直線和橢圓),但它確實支持SVG的大子集,這意味着您可以構建任何形狀庫以作為 ZCD15A75C26008696647B31A 文件加載到您的心臟內容中。 QML 可能看起來像這樣

Shape
{
    id: root

    ShapePath  {
         id: selection
         fillColor: "#EBF2F7"
         strokeWidth: 5
         strokeColor: "#0100ADEF"

         PathSvg {
             path: "L 150 50 L 100 150 z" // your path goes here 
         }     
     }
}

這是一個在 Qt 5.12 中創建的示例組件,它來自 SVG 圖形文件,在圖形編輯器中繪制並使用 Shape 組件進行渲染。 它是矢量圖形,在真實應用程序中完全可調整大小和完全交互(可以選擇單個牙齒,禁用其中一些等)。 此組件中的每個牙齒都是一個形狀。

從 SVG 圖形創建的示例小部件

In Qt 5.12 creating custom widgets / graphics with paintEvent() is likely not the best option, but if you want to stick with it, there's a nice class QSvgRenderer that can render SVG in pretty much the same way that you used to draw a line .

小部件很重,將它們用於單個形狀是沒有用的。 您想要一個可以迭代形狀列表並繪制它們的小部件。 存在這樣的小部件:QGraphicsSceneView 顯示 QGraphicsScene 中的內容。 您可能希望從那里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM