Qt में SVG: रेंडरर चुनें, फिर फ़ाइल जाँचें
Qt में SVG के लिए QSvgWidget या QSvgRenderer लें, वर्तमान सुविधा समर्थन जाँचें और ऐप में आकार बदल सकने वाले स्रोत तथा स्थिर रास्टर छवि का अंतर समझें।
इस पेज पर
- SVG संपादित करने से पहले प्रदर्शन विकल्प चुनें
- पूरी चित्रकृति से पहले छोटा स्रोत आज़माएँ
- न्यूनतम Qt 6 Widgets उदाहरण
- ब्राउज़र समानता मानने के बजाय वर्तमान समर्थन जाँचें
- ध्यान दें कि प्रक्रिया कब SVG को पिक्सेल बनाती है
- सब कुछ सरल बनाने से पहले परिणाम देखें
- केवल रास्टर बचे तो स्रोत मूल पुनर्प्राप्त करें
- अक्सर पूछे जाने वाले प्रश्न
- स्रोत
Qt Widgets ऐप में SVG ड्रॉइंग दिखानी हो तो QSvgWidget से शुरू करें। ड्रॉइंग चुने लक्ष्य पर बनानी हो तो QSvgRenderer लें। अंतर मायने रखता है: निश्चित आकार के QImage में एक बार चित्र बनाने से प्रदर्शन के लिए पिक्सेल मिलते हैं, जबकि SVG रखने से दूसरे आकार के लिए उसे फिर रेंडर कर सकते हैं। Qt की रेंडरिंग मार्गदर्शिका दोनों विकल्प बताती है।
पहले विकल्प चुनें, फिर चित्र जाँचें। ब्राउज़र पूर्वावलोकन इच्छित डिज़ाइन दिखा सकता है, लेकिन उससे यह सिद्ध नहीं होता कि Qt फ़ाइल में प्रयुक्त हर सुविधा का समर्थन करता है।
SVG संपादित करने से पहले प्रदर्शन विकल्प चुनें
| आपका काम | शुरुआती विकल्प | क्या जाँचें |
|---|---|---|
| दूसरे विजेट के साथ स्थिर SVG दिखाना | QSvgWidget | फ़ाइल लोड होना, ड्रॉइंग सीमाएँ और अनुपात |
| अपने विजेट या छवि में चित्र बनाना | पेंटर के साथ QSvgRenderer | लक्ष्य आकार और रेंडरिंग कब होती है |
| अलग-अलग वेक्टर बिंदु संपादित करना | चित्र संपादक या अलग संपादन कार्यान्वयन | संपादन योग्य स्रोत ज्यामिति और चयन व्यवहार |
Qt QSvgWidget को SVG प्रदर्शन विजेट बताता है और renderer() से उसका रेंडरर उपलब्ध कराता है। विजेट SvgWidgets का हिस्सा है; उसकी CMake निर्भरता Qt6::SvgWidgets है। केवल सामान्य SVG मॉड्यूल जोड़ने वाले पुराने उदाहरण से यहाँ क्लास संदर्भ अधिक उपयोगी है।
SVG दिखाने से चित्र संपादक नहीं बनता। किसी को पत्ती खिसकानी, कोना बदलना या अलग विवरण का रंग बदलना हो तो अलग स्रोत मूल रखें।

पूरी चित्रकृति से पहले छोटा स्रोत आज़माएँ
यह मौलिक ड्रॉइंग leaf.svg नाम से सहेजें। इसमें भरी हुई पत्ती, हल्की शिरा और अलग मूँगा रंग का वृत्त है:
<svg xmlns="http://www.w3.org/2000/svg" width="160" height="100" viewBox="0 0 160 100">
<path d="M24 78C20 34 56 18 98 26C90 62 58 86 24 78Z" fill="#176b64"/>
<path d="M28 74L78 38" fill="none" stroke="#fff6e8" stroke-width="5"/>
<circle cx="126" cy="26" r="10" fill="#ec785e"/>
</svg>चौड़ा कैनवास जानबूझकर है। पत्ती लंबी और संकरी बने तो वक्र संपादित करने से पहले अनुपात संभालने का तरीका जाँचें। वृत्त गायब हो तो दिखाई देने वाली सीमाएँ जाँचें और लोड की गई फ़ाइल की स्रोत से तुलना करें। यह छोटा उदाहरण क्लिपिंग या प्रभाव पर निर्भर हुए बिना पहचान योग्य विवरण देता है।
फ़ाइल की पृष्ठभूमि समझने के लिए SVG फ़ॉर्मेट मार्गदर्शिका वेक्टर आकार और बिटमैप वाले SVG आवरण का अंतर बताती है।
न्यूनतम Qt 6 Widgets उदाहरण
main.cpp बनाएँ:
#include <QApplication>
#include <QSvgRenderer>
#include <QSvgWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (argc != 2)
return 1;
QSvgWidget view;
view.load(QString::fromLocal8Bit(argv[1]));
if (!view.renderer()->isValid())
return 2;
view.renderer()->setAspectRatioMode(Qt::KeepAspectRatio);
view.resize(400, 240);
view.show();
return app.exec();
}प्रोग्राम को आर्ग्युमेंट के रूप में SVG फ़ाइलनाम दें; परीक्षण में बेहतर है कि पूरा पाथ दें। निकास कोड 1 का अर्थ है कि उदाहरण को ठीक एक फ़ाइलनाम नहीं मिला; 2 का अर्थ है कि रेंडरर ने वैध दस्तावेज़ नहीं बताया। ये कोड इस नमूने के चुनाव हैं, Qt का अपना त्रुटि कोड API नहीं।
isValid() लोड दस्तावेज़ जाँचता है। यह दिखावट स्वीकार करने का परीक्षण नहीं है। स्पष्ट KeepAspectRatio सेटिंग रेंडरर से अनुपात सुरक्षित रखने को कहती है; QSvgRenderer संदर्भ वैधता जाँच और अनुपात मोड बताता है।
स्रोत के साथ यह CMakeLists.txt रखें:
cmake_minimum_required(VERSION 3.16)
project(LeafPreview LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Widgets Svg SvgWidgets)
add_executable(leaf_preview main.cpp)
target_link_libraries(leaf_preview PRIVATE Qt6::Widgets Qt6::Svg Qt6::SvgWidgets)उदाहरण अनुप्रयोग के लिए Widgets, प्रदर्शन विजेट के लिए SvgWidgets और रेंडरर कॉल के लिए Svg लिंक करता है। Qt रेंडरर के Svg कंपोनेंट को SvgWidgets कंपोनेंट से अलग सूचीबद्ध करता है।
अपने स्थापित Qt 6 विकास किट से विन्यास और बिल्ड करें, फिर leaf.svg का पाथ देकर leaf_preview चलाएँ। यह दस्तावेज़ पर आधारित स्रोत उदाहरण है; हमने इसे Qt के नेटिव वातावरण में कंपाइल या चलाया नहीं। अपनाने से पहले लक्ष्य सिस्टम पर वास्तविक बिल्ड और चित्र जाँचें।
ब्राउज़र समानता मानने के बजाय वर्तमान समर्थन जाँचें
आधुनिक Qt SVG केवल स्थिर SVG Tiny सुविधाओं तक सीमित नहीं है। Qt, Qt 6.7 से अतिरिक्त एलिमेंट बताता है, जिन्हें डिफ़ॉल्ट रूप से पार्स किया जाता है; पार्सिंग को Tiny सुविधाओं तक सीमित करने का विकल्प भी है। उसका विस्तारित सुविधा संदर्भ समर्थित अतिरिक्त सुविधाएँ और उनकी सीमाएँ बताता है।
एक ठोस सीमा clipPath है: उसी पृष्ठ पर वह असमर्थित है। इसलिए क्लिपिंग पर निर्भर फ़ाइल ब्राउज़र में सही दिखने पर भी स्रोत जाँच माँगती है। चुनिंदा मास्क और फ़िल्टर का समर्थन बताया गया है, लेकिन इससे हर प्रभाव या निर्यात सेटिंग का समर्थन सिद्ध नहीं होता।
सरल पत्ती काम करे लेकिन बड़ी चित्रकृति अलग दिखे तो प्रति बनाएँ और एक बार में एक संदिग्ध सुविधा हटाएँ। क्लिप किए चित्र के लिए क्लिपिंग ऑपरेशन पर निर्भर रहने के बजाय संपादक में इच्छित दृश्य ज्यामिति बनाने पर विचार करें। मूल बदलने से पहले प्राप्त बाहरी आकृति की मूल से तुलना करें।
टेक्स्ट की अलग जाँच चाहिए। अक्षर बदलें तो SVG फ़ॉन्ट समस्या मार्गदर्शिका अपनाएँ। अक्षरों को आकारों में बदलना डिज़ाइन संबंधी समझौता है; गलत फ़ाइलनाम या गायब मॉड्यूल की पहली मरम्मत यह नहीं होनी चाहिए।
ध्यान दें कि प्रक्रिया कब SVG को पिक्सेल बनाती है
मान लें आपका कोड पत्ती को एक बार छोटे QImage में रेंडर करता है, उससे पिक्समैप बनाता है और बाद में पिक्समैप बड़ा करता है। बड़ा करना रास्टर परिणाम पर लागू होता है। SVG स्रोत गायब नहीं हुआ, लेकिन बाद का प्रदर्शन ऑपरेशन उससे नई रेंडरिंग नहीं माँगता।
Qt की रेंडरिंग मार्गदर्शिका छवि में चित्र बनाने और विजेट के पेंट इवेंट में चित्र बनाने का अंतर बताती है। प्रदर्शन आकार बदले तो तय करें कि SVG फिर कहाँ रेंडर होना चाहिए। कैश किए बिटमैप को इस बात का प्रमाण न मानें कि स्रोत का आकार स्वयं नहीं बदल सकता।
SVG आइकन सेट तैयार करते समय भी यही अंतर मायने रखता है। स्रोत सीमाएँ एक जैसी रखें, फिर प्रत्येक आइकन उसके वास्तविक उपयोग आकार पर देखें। बड़ी पत्ती पहचानी जा सकती है, फिर भी छोटे प्रदर्शन में उसकी शिरा या अलग वृत्त खो सकता है।
सब कुछ सरल बनाने से पहले परिणाम देखें
वास्तव में लोड की जा रही फ़ाइल से शुरू करें, मिलते-जुलते नाम वाले दूसरे निर्यात से नहीं। पुष्टि करें कि सरल उदाहरण दिखता है, फिर उत्पादन में इस्तेमाल होने वाले चित्र की इच्छित आकार पर और आकार बदलने के बाद तुलना करें।
पत्ती में देखें कि वृत्त अलग रहे, शिरा दिखे और चौड़ा कैनवास ड्रॉइंग न खींचे। ये आपके परीक्षण की स्वीकार्यता जाँचें हैं, हमारे बताए परिणाम नहीं। पूरा दृश्य खाली हो तो खाली SVG जाँच सूची अदृश्य चित्र और ड्रॉइंग सीमाओं को अनुप्रयोग सेटअप से अलग समझने में मदद करती है।
डिज़ाइन के लिए उचित हो तो फोटो या बनावट वाली चित्रकृति रास्टर संसाधन ही रखें। SVG चुनने से चित्र की आवश्यकता पूरी होनी चाहिए; उससे अपने आप छोटी फ़ाइल, तेज़ रेंडरिंग या सभी इंजन में समान परिणाम सिद्ध नहीं होता।
केवल रास्टर बचे तो स्रोत मूल पुनर्प्राप्त करें
आइकन केवल PNG या JPG में बचा हो तो PerfectVector का छवि से वेक्टर कार्यप्रवाह Qt को देने से पहले संपादन योग्य SVG चित्र तैयार करने में मदद कर सकता है। रूपांतरण के बाद बाहरी आकृति, अंतराल और अलग विवरण देखें, फिर चुने Qt विकल्प से SVG जाँचें। वेक्टराइज़ेशन ज्यामिति तैयार करता है; वह रेंडरर सुविधाएँ नहीं जोड़ता और प्रदर्शन विजेट को पाथ संपादक नहीं बनाता।
साफ़ वेक्टर मूल पहले से हो तो सीधे वही फ़ाइल बदलें। कोई विशेष सुविधा या छोटे आकार का विवरण ध्यान माँगे तभी प्रति सरल बनाएँ और भविष्य के संपादन के लिए अधिक समृद्ध स्रोत रखें।
अक्सर पूछे जाने वाले प्रश्न
मुझे QSvgWidget या QSvgRenderer में से क्या लेना चाहिए? Widgets इंटरफ़ेस में SVG दिखाने के लिए QSvgWidget लें। कस्टम विजेट या छवि जैसे चुने लक्ष्य पर चित्र बनाने का नियंत्रण चाहिए तो QSvgRenderer लें।
क्या वर्तमान Qt केवल SVG Tiny समर्थित करता है? Qt स्थिर SVG Tiny समर्थन के साथ Qt 6.7 में आए चुनिंदा विस्तार बताता है। केवल Tiny समर्थन या ब्राउज़र समानता मानने के बजाय वर्तमान सुविधा संदर्भ और अपने विकल्प जाँचें।
पिक्समैप में रखने के बाद SVG धुँधला क्यों दिख सकता है? पहले उसे निश्चित आकार की रास्टर छवि में रेंडर किया हो तो परिणाम बड़ा करने से पिक्सेल बढ़ते हैं। रेंडर लक्ष्य और आवश्यक आकार पर SVG दोबारा रेंडर होता है या नहीं, यह देखें।
क्या वैध SVG लोड होने से हर विवरण सही रेंडर होना सिद्ध होता है? नहीं। वैधता जाँच दृश्य निरीक्षण की जगह नहीं लेती। वास्तविक लक्ष्य अनुप्रयोग में सीमाएँ, अनुपात, छोटे विवरण और समर्थित सुविधाओं की तुलना करें।
स्रोत
- Qt — SVG फ़ाइलों की रेंडरिंग — प्रदर्शन विजेट, पेंटर लक्ष्य और विजेट रेंडरिंग तथा बीच के रास्टर परिणाम का अंतर।
- Qt — QSvgWidget क्लास — प्रदर्शन विजेट, रेंडरर उपलब्धता और SvgWidgets निर्भरता।
- Qt — QSvgRenderer क्लास — Svg निर्भरता, दस्तावेज़ वैधता और अनुपात सेटिंग।
- Qt — विस्तारित सुविधाएँ — आधुनिक विस्तार और स्पष्ट सुविधा सीमाएँ, जिनमें असमर्थित क्लिपिंग पाथ शामिल हैं।
एक छोटी फ़ाइल से शुरू करें और चुने Qt विकल्प में देखें। रास्टर चित्र पुनर्प्राप्त करना हो तो संपादन योग्य जाँच के लिए प्रारंभिक SVG तैयार करें, आकारों की स्रोत से तुलना करें और संसाधन बदलने से पहले अनुप्रयोग स्तर की जाँचें दोहराएँ।
Blog से और

SVG foreignObject टेक्स्ट: गायब एक्सपोर्ट लेबल ठीक करें
ब्राउज़र में दिखने पर भी एक्सपोर्ट में गायब SVG लेबल ठीक करें। foreignObject और नेटिव text की तुलना करें, नेमस्पेस जाँचें और मौजूदा चित्र सुरक्षित रखें।

QGIS SVG मार्कर: बदल सकने वाले रंगों के साथ प्रतीक बनाएँ
भराव और आउटलाइन पैरामीटर, वास्तविक खाली कटआउट और स्थिर सजावटी रंग वाला कस्टम QGIS SVG मार्कर तैयार करें। सामान्य SVG मूल प्रति रखें और गंतव्य प्रति जाँचें।