সংক্ষিপ্ত উত্তর
কিউটির এমভিসি কেবল একটি ডেটা স্ট্রাকচারের জন্য প্রযোজ্য । কোনও এমভিসি অ্যাপ্লিকেশন সম্পর্কে কথা বলার সময় আপনার সম্পর্কে QAbstractItemModel
বা ভেবে দেখা উচিত নয় QListView
।
আপনি যদি আপনার পুরো প্রোগ্রামটির জন্য একটি এমভিসি আর্কিটেকচার চান তবে কিউটি তেমন একটি "বিশাল" মডেল / দেখার কাঠামো নেই। তবে আপনার প্রোগ্রামের প্রতিটি তালিকা / ডেটা গাছের জন্য আপনি কিউটি এমভিসি পদ্ধতির ব্যবহার করতে পারেন যা প্রকৃতপক্ষে তার দৃষ্টিতে একটি নিয়ামক রয়েছে has তথ্য মধ্যে অথবা মডেল বাইরে; এটি নির্ভর করে আপনি কোন ধরণের মডেলটি ব্যবহার করছেন (নিজস্ব মডেল সাবক্লাস: সম্ভবত মডেলের মধ্যে; যেমন কিউএসকিউএল টেবিলমোডেল: বাইরের (তবে সম্ভবত ক্যাশে থাকা) মডেল)। আপনার মডেল এবং দৃষ্টিভঙ্গি একসাথে রাখতে, নিজস্ব ক্লাস ব্যবহার করুন যা ব্যবসার যুক্তি প্রয়োগ করে ।
দীর্ঘ উত্তর
কিউটির মডেল / দর্শন পদ্ধতির এবং পরিভাষা:
Qt সহজ সরবরাহ করে তাদের মডেলগুলির জন্য দর্শন দেয়। এগুলির মধ্যে একটি কন্ট্রোলার অন্তর্নির্মিত রয়েছে: নির্বাচন করা, সম্পাদনা করা এবং আইটেমগুলি সরানো এমন কিছু বিষয় যা বেশিরভাগ ক্ষেত্রে একটি নিয়ামক "নিয়ন্ত্রণ" থাকে। এটি হ'ল ইউজার ইনপুট (মাউস ক্লিক এবং মুভস) ব্যাখ্যা করে এবং মডেলটিকে উপযুক্ত কমান্ড দেয়।
কিউটির মডেলগুলি প্রকৃতপক্ষে অন্তর্নিহিত ডেটাযুক্ত মডেল। অবশ্যই বিমূর্ত মডেলগুলি ডেটা ধারণ করে না, যেহেতু Qt জানে না আপনি কীভাবে সেগুলি সঞ্চয় করতে চান। কিন্তু আপনি সাবক্লাসে আপনার ডেটা ধারক যুক্ত করে এবং আপনার ডেটা অ্যাক্সেস করার মডেল ইন্টারফেস তৈরি করে আপনার প্রয়োজনে একটি QAbstractItemModel প্রসারিত করুন। সুতরাং প্রকৃতপক্ষে, এবং আমি ধরে নিচ্ছি যে আপনি এটি পছন্দ করেন না, সমস্যাটি হ'ল আপনাকে মডেলটি প্রোগ্রাম করতে হবে, যাতে আপনার ডেটা কাঠামোতে কীভাবে ডেটা অ্যাক্সেস এবং সংশোধন করা হয়।
এমভিসি পরিভাষায়, মডেলটিতে ডেটা এবং লজিক উভয়ই থাকে । কিউটিতে, আপনার নিজের ব্যবসায়ের কিছু যুক্তি আপনার মডেলটির মধ্যে অন্তর্ভুক্ত করা বা এটি বাইরে রেখে দেওয়া, এটি নিজেই একটি "ভিউ" হয়ে থাকা আপনার পক্ষে you এটি যুক্তি দ্বারা কী বোঝানো হচ্ছে তাও পরিষ্কার নয়: আইটেম নির্বাচন করা, নামকরণ এবং চলাচল করা? => ইতিমধ্যে প্রয়োগ করা হয়েছে। তাদের সাথে গণনা করছেন? => এটিকে মডেল সাবক্লাসের বাইরে বা ভিতরে রাখুন। কোনও ফাইল / থেকে ডেটা সঞ্চয় বা লোড হচ্ছে? => এটি মডেল সাবক্লাসের ভিতরে রাখুন।
আমার ব্যক্তিগত মতামত:
এটি একটি ভাল সরবরাহ করা খুব কঠিন একজন প্রোগ্রামারকে এবং জেনেরিক এমভি (সি) সিস্টেম সরবরাহ করা । কারণ বেশিরভাগ ক্ষেত্রে মডেলগুলি সহজ (উদাহরণস্বরূপ কেবল স্ট্রিং তালিকাগুলি) Qt এছাড়াও ব্যবহারের জন্য প্রস্তুত QStringListModel সরবরাহ করে। তবে যদি আপনার ডেটা স্ট্রিংয়ের চেয়ে জটিল হয় তবে আপনি কীভাবে Qt মডেল / ভিউ ইন্টারফেসের মাধ্যমে ডেটা উপস্থাপন করতে চান তা আপনার উপর নির্ভর করে। যদি আপনার কাছে উদাহরণস্বরূপ 3 টি ক্ষেত্রের একটি স্ট্রাক্ট থাকে (যাক নাম, বয়স এবং লিঙ্গযুক্ত ব্যক্তিরা বলুন) আপনি 3 টি ক্ষেত্র 3 টি আলাদা কলামে বা 3 টি পৃথক ভূমিকার জন্য নির্ধারণ করতে পারেন। আমি উভয় পদ্ধতিরই অপছন্দ করি।
আমি মনে করি Qt- এর মডেল / দেখার কাঠামো কেবল তখনই কার্যকর যখন আপনি সাধারণ ডেটা কাঠামো প্রদর্শন করতে চান । ডেটা কাস্টম ধরণের বা গাছ বা তালিকায় নয় (যেমন একটি গ্রাফ) না থাকলে কাঠামোগত হলে তা পরিচালনা করা কঠিন হয়ে পড়ে । বেশিরভাগ ক্ষেত্রে তালিকাগুলি পর্যাপ্ত এবং কিছু ক্ষেত্রে এমনকি কোনও মডেলের কেবল একটি একক প্রবেশ থাকতে হবে। বিশেষত আপনি যদি আলাদা আলাদা বৈশিষ্ট্যযুক্ত (এক শ্রেণির একটি উদাহরণ) একক প্রবেশকে মডেল করতে চান তবে Qt- এর মডেল / দেখার কাঠামোটি ইউজার ইন্টারফেস থেকে লজিককে আলাদা করার সঠিক উপায় নয়।
বিষয়গুলির সংক্ষিপ্তসার হিসাবে, আমি মনে করি Qt এর মডেল / দেখার কাঠামোটি কার্যকর এবং যদি কেবল আপনার ডেটা Qt এর ভিউজেট উইজেটগুলির দ্বারা দেখা হয় । এটি কেবল অকার্যকর যদি আপনি কেবলমাত্র একটি এন্ট্রি সম্বলিত কোনও মডেল, যেমন আপনার অ্যাপ্লিকেশনটির সেটিংস, বা যদি আপনার ডেটা প্রিন্টযোগ্য প্রকারের না করে থাকেন তবে নিজের দর্শকের লিখতে চলেছেন।
আমি (বড়) অ্যাপ্লিকেশনটির মধ্যে কীভাবে Qt মডেল / ভিউ ব্যবহার করেছি?
আমি একবার (একটি দলে) একটি অ্যাপ্লিকেশন লিখেছিলাম যা ডেটা পরিচালনা করতে একাধিক কিউটি মডেল ব্যবহার করে। আমরা DataRole
প্রকৃত ডেটা ধরে রাখতে একটি তৈরি করার সিদ্ধান্ত নিয়েছি যা প্রতিটি বিভিন্ন মডেলের সাবক্লাসের জন্য আলাদা কাস্টম ধরণের ছিল। আমরা একটি বহিরাগত মডেল ক্লাস তৈরি করেছি Model
যা বিভিন্ন Qt মডেলকে ধারণ করে। আমরা একটি বহিরাগত ভিউ ক্লাসও তৈরি করেছি View
যা উইন্ডোজ (উইজেটগুলি) ধারণ করে যাগুলির মধ্যে থাকা মডেলের সাথে সংযুক্ত থাকে Model
। সুতরাং এই পদ্ধতির একটি বর্ধিত Qt এমভিসি, আমাদের নিজস্ব প্রয়োজন অনুসারে অভিযোজিত। উভয় Model
এবং View
ক্লাস উভয়ই কিউটি এমভিসির সাথে কিছু করার নেই।
আমরা কোথায় যুক্তি রেখেছি ? আমরা এমন ক্লাস তৈরি করেছি যা উত্স মডেলগুলি (যখন তারা পরিবর্তিত হয়েছিল) থেকে ডেটা পড়ে এবং লক্ষ্য মডেলগুলিতে ফলাফল লিখে ডেটাতে প্রকৃত গণনা করে। কিউটির দৃষ্টিকোণ থেকে, এই যুক্তিযুক্ত ক্লাসগুলি ভিউ হবে, যেহেতু তারা মডেলগুলিতে "সংযুক্ত" করে (ব্যবহারকারীর জন্য "দৃশ্য" নয়, তবে অ্যাপ্লিকেশনটির ব্যবসায়িক লজিক অংশের জন্য "ভিউ")।
কন্ট্রোলাররা কোথায় ? মূল এমভিসি পরিভাষায়, নিয়ন্ত্রণকারীরা ব্যবহারকারী ইনপুট (মাউস এবং কীবোর্ড) ব্যাখ্যা করে এবং অনুরোধকৃত ক্রিয়া সম্পাদন করার জন্য মডেলকে আদেশ দেয়। যেহেতু কিউটি ভিউগুলি ইতিমধ্যে পুনরায় নামকরণ এবং আইটেমগুলি সরানোর মতো ব্যবহারকারীর ইনপুটটি ব্যাখ্যা করে, এটির প্রয়োজন হয়নি। তবে আমাদের যা প্রয়োজন তা ছিল ব্যবহারকারী ইন্টারঅ্যাকশনটির ব্যাখ্যা যা Qt ভিউগুলি অতিক্রম করে।