কিউটি বিশ্বে ইভেন্ট এবং সংকেত / স্লটের পার্থক্য কী?
একজন কি অন্যটিকে প্রতিস্থাপন করে? ইভেন্টগুলি কি সংকেত / স্লটের বিমূর্ততা?
উত্তর:
কিউটি ডকুমেন্টেশন সম্ভবত এটি শ্রেষ্ঠ ব্যাখ্যা করেছেন:
কিউটিতে, ইভেন্টগুলি অবজেক্ট
QEvent
ক্লাস থেকে উদ্ভূত বস্তু, যা অ্যাপ্লিকেশনটির মধ্যে ঘটেছিল বা বাইরের ক্রিয়াকলাপের ফলে অ্যাপ্লিকেশনটির সম্পর্কে জানা থাকা দরকার বলে প্রতিনিধিত্ব করে। ইভেন্টগুলিQObject
সাবক্লাসের যে কোনও উদাহরণের মাধ্যমে গ্রহণ ও পরিচালনা করতে পারে তবে সেগুলি উইজেটের সাথে বিশেষভাবে প্রাসঙ্গিক। এই দস্তাবেজটি বর্ণনা করে যে কীভাবে একটি সাধারণ অ্যাপ্লিকেশনটিতে ইভেন্টগুলি বিতরণ করা হয় এবং পরিচালনা করা হয়।
সুতরাং ইভেন্ট এবং সিগন্যাল / স্লট একই জিনিস সম্পাদন করা দুটি সমান্তরাল প্রক্রিয়া are সাধারণভাবে, একটি ইভেন্ট বাইরের সত্তা দ্বারা উত্পন্ন করা হবে (উদাহরণস্বরূপ, কীবোর্ড বা মাউস হুইল) এবং ইভেন্ট লুপের মাধ্যমে সরবরাহ করা হবে QApplication
। সাধারণভাবে, আপনি কোডটি সেট আপ না করা পর্যন্ত আপনি ইভেন্ট তৈরি করবেন না। আপনি এগুলি ফিল্টার করতে পারেন QObject::installEventFilter()
বা উপযুক্ত ফাংশনগুলিকে ওভাররাইড করে সাবক্ল্যাসড বস্তুতে ইভেন্টগুলি পরিচালনা করতে পারেন।
সংকেত এবং স্লটগুলি উত্পাদন করা এবং গ্রহণ করা অনেক সহজ এবং আপনি যে কোনও দুটি QObject
সাবক্লাস সংযোগ করতে পারেন । এগুলি মেটাক্লাসের মাধ্যমে পরিচালিত হয় (আরও তথ্যের জন্য আপনার moc_classname.cpp ফাইলটি দেখুন) তবে আপনি যে আন্তঃরঙের যোগাযোগ তৈরি করবেন তার বেশিরভাগই সম্ভবত সংকেত এবং স্লট ব্যবহার করবে। সিগন্যালগুলি তাত্ক্ষণিকভাবে বিতরণ করা যেতে পারে বা একটি সারির মাধ্যমে পিছিয়ে দেওয়া যেতে পারে (যদি আপনি থ্রেড ব্যবহার করছেন)।
একটি সংকেত তৈরি করা যেতে পারে।
কিউটিতে, সংকেত এবং ইভেন্টগুলি উভয়ই পর্যবেক্ষক প্যাটার্নের বাস্তবায়ন । এগুলি বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয় কারণ তাদের শক্তি এবং দুর্বলতা রয়েছে।
প্রথমে আসুন আমরা কিউটি ইভেন্টের অর্থ হ'ল সংজ্ঞা দিই: কিউটি ক্লাসে একটি ভার্চুয়াল ফাংশন, আপনি যদি ইভেন্টটি পরিচালনা করতে চান তবে আপনার একটি বেস ক্লাসে পুনর্নির্মাণের আশা করা হচ্ছে। এটি টেম্পলেট পদ্ধতি প্যাটার্নের সাথে সম্পর্কিত ।
আমি কীভাবে " হ্যান্ডেল " শব্দটি ব্যবহার করেছি তা নোট করুন । প্রকৃতপক্ষে, এখানে সংকেত এবং ইভেন্টের অভিপ্রায়ের মধ্যে একটি প্রাথমিক পার্থক্য:
পার্থক্যটি হ'ল আপনি যখন ইভেন্টটি "পরিচালনা" করেন, আপনি শ্রেণীর বাইরে কার্যকর এমন আচরণের সাথে "প্রতিক্রিয়া জানানোর" দায়িত্ব গ্রহণ করেন। উদাহরণস্বরূপ, এমন অ্যাপ্লিকেশনটি বিবেচনা করুন যাতে তার সাথে একটি নম্বরযুক্ত বোতাম রয়েছে। অ্যাপটিকে ব্যবহারকারীদের বোতামটি ফোকাস করতে দেওয়া উচিত এবং "উপরে" এবং "ডাউন" কীবোর্ড কীগুলি টিপে সংখ্যাটি পরিবর্তন করতে হবে। অন্যথায় বোতামটি স্বাভাবিকের মতো কাজ করা উচিত QPushButton
(এটি ক্লিক করা যায় ইত্যাদি)। কিউটি এই আপনার নিজের সামান্য পুনর্ব্যবহারযোগ্য "কম্পোনেন্ট" (এর উপশ্রেণী তৈরি করে সম্পন্ন করা হয় QPushButton
), যা reimplements QWidget::keyPressEvent
। সুডোকোড:
class NumericButton extends QPushButton
private void addToNumber(int value):
// ...
reimplement base.keyPressEvent(QKeyEvent event):
if(event.key == up)
this.addToNumber(1)
else if(event.key == down)
this.addToNumber(-1)
else
base.keyPressEvent(event)
দেখা? এই কোডটি একটি নতুন বিমূর্ততা উপস্থাপন করে: একটি উইজেট যা বোতামটির মতো কাজ করে তবে কিছু অতিরিক্ত কার্যকারিতা সহ। আমরা খুব কার্যকরীভাবে এই কার্যকারিতা যুক্ত করেছি:
keyPressEvent
একটি সংকেত তৈরি করে থাকে , আমাদের সিগন্যালের উত্তরাধিকারী হতে হবে QPushButton
বা কেবল বাহ্যিকভাবে সংযুক্ত করতে হবে কিনা তা আমাদের সিদ্ধান্ত নেওয়া দরকার । তবে এটি নির্বোধ হবে, যেহেতু Qt এ আপনি সর্বদা প্রত্যাশিত হবেন যখন কোনও কাস্টম আচরণের সাথে উইজেট লেখার সময় (সঙ্গত কারণে - পুনঃব্যবহারযোগ্যতা / মডুলারালিটি)। সুতরাং keyPressEvent
একটি ইভেন্ট তৈরি করে, তারা তাদের উদ্দেশ্যটি জানায় keyPressEvent
যা কার্যকারিতার কেবল একটি প্রাথমিক বিল্ডিং ব্লক। যদি এটি কোনও সংকেত হত তবে এটি ব্যবহারকারীর মুখোমুখি জিনিসটির মতো লাগবে, যখন এটি করার ইচ্ছা নেই।keyPressEvent
সংকেত হত তবে প্রায় অসম্ভব হয়ে উঠবে ।কিউটি নকশা ভাল চিন্তা আউট হয় - তারা আমাদের তৈরি সাফল্যের গর্তে পড়ে যায় ডান জিনিস কাজ করা সহজ এটি তৈরি ও ভুল জিনিস করতে কঠিন (keyPressEvent একটি ইভেন্ট তৈরি করে) দ্বারা।
অন্যদিকে, এর সহজ ব্যবহার বিবেচনা করুন QPushButton
- কেবল এটি তাত্পর্যপূর্ণ করা হয় এবং এটি ক্লিক করার পরে বিজ্ঞপ্তি পাওয়া :
button = new QPushButton(this)
connect(button, SIGNAL(clicked()), SLOT(sayHello())
এটি ক্লাসের ব্যবহারকারী দ্বারা পরিষ্কারভাবে বোঝানো হয়েছে :
QPushButton
প্রতিটি বার সাবক্লাস করতে হয় তবে কিছু ক্লিকের জন্য আমাদের কিছু বোতামটি জানানোর জন্য প্রয়োজন, কারণ এটি কোনও অকারণে অনেক সাবক্লাসের প্রয়োজন ! messagebox
ক্লিক করা হলে শুধুমাত্র "হ্যালো ওয়ার্ল্ড" দেখায় এমন উইজেট কেবলমাত্র একক ক্ষেত্রে কার্যকর - তাই এটি সম্পূর্ণ পুনরায় ব্যবহারযোগ্য নয়। আবার, বাহ্যিকভাবে এর সাথে সংযোগ স্থাপন করে - সঠিক কাজটি করা ছাড়া আমাদের আর কোনও উপায় নেই।clicked()
- বা এর সাথে বেশ কয়েকটি সংকেতকে সংযুক্ত করতে চাই sayHello()
। সিগন্যালের সাথে কোনও কোলাহল নেই। সাবক্লাসিংয়ের সাহায্যে আপনি উপযুক্ত নকশার সিদ্ধান্ত না নেওয়া পর্যন্ত আপনাকে বসে কিছু শ্রেণির চিত্রগুলি নিয়ে চিন্তা করতে হবে।নোট করুন যে জায়গাগুলির মধ্যে যেটি QPushButton
ইমিট করে clicked()
তা এর mousePressEvent()
বাস্তবায়নে রয়েছে। এর অর্থ এই নয় clicked()
এবং mousePressEvent()
বিনিময়যোগ্য - কেবলমাত্র তারা সম্পর্কিত।
সুতরাং সংকেত এবং ইভেন্টগুলির পৃথক উদ্দেশ্য রয়েছে (তবে এটির সাথে সম্পর্কিত যে উভয়ই আপনাকে কিছু ঘটনার একটি বিজ্ঞপ্তিতে "সাবস্ক্রাইব" করতে দেয়)।
আমি এখন পর্যন্ত উত্তর পছন্দ করি না। - আমাকে প্রশ্নের এই অংশে মনোনিবেশ করা যাক:
ইভেন্টগুলি কি সংকেত / স্লটের বিমূর্ততা?
সংক্ষিপ্ত উত্তর: না। দীর্ঘ উত্তর একটি "আরও ভাল" প্রশ্ন উত্থাপন করে : সংকেত এবং ইভেন্টগুলি কীভাবে সম্পর্কিত?
একটি অলস মূল লুপ (উদাহরণস্বরূপ Qt এর) অপারেটিং সিস্টেমের একটি নির্বাচন () কলটিতে সাধারণত "আটকে" থাকে। এই কলটি অ্যাপ্লিকেশনটিকে "ঘুম" করে তোলে, যখন এটি সকেট বা ফাইলগুলির একটি গুচ্ছ বা কার্নেলের কাছে যা কিছু জিজ্ঞাসা করে তা পাস করে: যদি এইগুলির মধ্যে কিছু পরিবর্তন হয়, তবে নির্বাচন করুন () কলটি ফিরে আসুন। - এবং কার্নেল, বিশ্বের কর্তা হিসাবে জানে যে কখন তা ঘটে।
সেই নির্বাচনের () কলের ফলাফলটি হতে পারে: সকেটের নতুন ডেটা এক্স 11 এর সাথে সংযুক্ত, আমরা যে ইউডিপি পোর্টের মধ্যে শুনি তার প্যাকেট ইত্যাদি এসেছিল That এই স্টাফটি না কোনও Qt সংকেত, না কিউটি ইভেন্ট এবং এবং কিউটি প্রধান লুপ নিজেই সিদ্ধান্ত নেয় যদি তাজা ডেটাটিকে এক, অন্যটিতে পরিণত করে বা এড়িয়ে যায়।
কিউটি কী-প্রেস ইভেন্ট () বা কী-ওয়ার্ডপ্রেস () এর মতো কোনও পদ্ধতিতে কল করতে পারে, কার্যকরভাবে এটিকে Qt ইভেন্টে রূপান্তরিত করে। বা কিউটি একটি সংকেত নির্গত করে, যা কার্যকরভাবে সেই সংকেতের জন্য নিবন্ধিত সমস্ত ফাংশন সন্ধান করে এবং একে একে একে ডাকে।
এই দুটি ধারণার একটি পার্থক্য এখানে দৃশ্যমান: এই সংকেতটিতে নিবন্ধিত অন্যান্য স্লটগুলি কল হবে কিনা তা নিয়ে একটি স্লটে কোনও ভোট নেই। - ইভেন্টগুলি আরও একটি শৃঙ্খলার মতো হয় এবং ইভেন্ট হ্যান্ডলার সিদ্ধান্ত নেয় যে এটি যদি সেই চেইনে বাধা দেয় বা না করে। এই দিক থেকে সংকেতগুলি তারা বা গাছের মতো দেখাচ্ছে।
একটি ইভেন্ট ট্রিগার করতে পারে বা পুরোপুরি সিগন্যালে রূপান্তরিত হতে পারে (কেবলমাত্র একটিটি নির্গত করুন এবং "সুপার ()" কল করবেন না)। একটি সংকেত ইভেন্টে রূপান্তরিত হতে পারে (ইভেন্ট হ্যান্ডলারকে কল করুন)।
কেসের উপর নির্ভর করে কিসের বিমূর্ততা রয়েছে: ক্লিক করা () - সিগন্যাল অ্যাবস্ট্রাক্ট মাউস ইভেন্টগুলি (একটি বোতাম খুব বেশি না ঘুরে আবার নীচে নেমে যায়)। কীবোর্ড ইভেন্টগুলি নিম্ন স্তরের বিমূর্ততা (果 বা é এর মতো জিনিসগুলি আমার সিস্টেমে বেশ কয়েকটি কী স্ট্রোক)।
হতে পারে ফোকাসআইএনএভেন্ট () এর বিপরীত উদাহরণ: এটি ক্লিক করা () সংকেতটি ব্যবহার করতে পারে (এবং এইভাবে বিমূর্ত), তবে এটি আসলে কী তা আমি জানি না।
ইভেন্ট লুপ দ্বারা ইভেন্টগুলি প্রেরণ করা হয়। প্রতিটি জিইউআই প্রোগ্রামের কিউটি, উইন 32 বা অন্য কোনও জিইউআই লাইব্রেরি ব্যবহার করে উইন্ডোজ বা লিনাক্স যাই লিখুন না কেন ইভেন্ট লুপের প্রয়োজন হয়। পাশাপাশি প্রতিটি থ্রেডের নিজস্ব ইভেন্ট লুপ রয়েছে। কিউটিতে "জিইউআই ইভেন্ট লুপ" (যা সমস্ত কিউটি অ্যাপ্লিকেশনগুলির মূল লুপ) লুকানো থাকে তবে আপনি এটি কল করা শুরু করেন:
QApplication a(argc, argv);
return a.exec();
আপনার প্রোগ্রামে ওএস এবং অন্যান্য অ্যাপ্লিকেশন প্রেরিত বার্তাগুলি ইভেন্ট হিসাবে প্রেরণ করা হয়।
সংকেত এবং স্লটগুলি Qt প্রক্রিয়া। মোক (মেটা-অবজেক্ট সংকলক) ব্যবহার করে সংকলনের প্রক্রিয়াতে এগুলি কলব্যাক ফাংশনে পরিবর্তিত হয়।
ইভেন্টের একটি রিসিভার থাকা উচিত, যা এটি প্রেরণ করা উচিত। অন্য কারও এই ইভেন্টটি করা উচিত নয়।
নির্গত সিগন্যালের সাথে সংযুক্ত সমস্ত স্লট কার্যকর করা হবে।
আপনার সিগন্যালগুলি ইভেন্ট হিসাবে ভাবেন না, কারণ আপনি Qt নথিতে পড়তে পারেন:
যখন কোনও সিগন্যাল নির্গত হয়, তখন এর সাথে সংযুক্ত স্লটগুলি সাধারণত একটি সাধারণ ফাংশন কলের মতোই অবিলম্বে কার্যকর করা হয়। যখন এটি ঘটে, সিগন্যালগুলি এবং স্লট প্রক্রিয়া কোনও জিইআইআই ইভেন্ট লুপ থেকে সম্পূর্ণ স্বতন্ত্র।
আপনি যখন কোনও ইভেন্ট প্রেরণ করেন, ইভেন্ট লুপটি আগে উপস্থিত সমস্ত ইভেন্ট প্রেরণ না করা পর্যন্ত কিছু সময়ের জন্য অপেক্ষা করতে হবে। এ কারণে ইভেন্ট বা সিগন্যাল প্রেরণের পরে কোডটি কার্যকর করা আলাদা। ইভেন্ট প্রেরণের নিম্নলিখিত কোডগুলি তাত্ক্ষণিকভাবে চালানো হবে। সংকেত এবং স্লট প্রক্রিয়া সহ এটি সংযোগের ধরণের উপর নির্ভর করে। সাধারণত এটি সমস্ত স্লটের পরে কার্যকর করা হবে। কিউটি :: কুইডড কানেকশন ব্যবহার করে, এটি ইভেন্টের মতোই অবিলম্বে কার্যকর করা হবে। Qt ডকুমেন্টেশনে সমস্ত সংযোগের প্রকারগুলি পরীক্ষা করুন ।
When you send an event, it must wait for time when event loop dispatch all events that came earlier. Because of this, execution of the cod after sending event or signal is different
একটি নিবন্ধ রয়েছে যা ইভেন্ট প্রসেসিংয়ে কিছু বিশদ আলোচনা করে: http://www.packtpub.com/article/events-and-signals
এটি এখানে ইভেন্ট এবং সিগন্যালের মধ্যে পার্থক্য নিয়ে আলোচনা করেছে:
ইভেন্টগুলি এবং সংকেতগুলি একই জিনিস সম্পাদন করতে ব্যবহৃত দুটি সমান্তরাল প্রক্রিয়া। সাধারণ পার্থক্য হিসাবে, উইজেট ব্যবহার করার সময় সংকেতগুলি কার্যকর হয়, অন্যদিকে উইজেট বাস্তবায়নের সময় ইভেন্টগুলি কার্যকর। উদাহরণস্বরূপ, যখন আমরা কিউপুশ বাটনের মতো উইজেট ব্যবহার করছি, আমরা নিম্ন-স্তরের মাউস প্রেস বা কী প্রেস ইভেন্টগুলির চেয়ে সিগন্যালটি নির্গত হওয়ার চেয়ে তার ক্লিক () সিগন্যালে বেশি আগ্রহী। তবে যদি আমরা কিউপুষবটন ক্লাস বাস্তবায়ন করি তবে আমরা মাউস এবং মূল ইভেন্টগুলির কোড প্রয়োগের ক্ষেত্রে আরও আগ্রহী। এছাড়াও, আমরা সাধারণত ইভেন্টগুলি পরিচালনা করি তবে সংকেত নির্গমন দ্বারা বিজ্ঞপ্তি পাই।
এটি এটি সম্পর্কে কথা বলার একটি সাধারণ উপায় বলে মনে হয়, যেমন গৃহীত উত্তরটি একই বাক্যাংশগুলির কয়েকটি ব্যবহার করে।
দ্রষ্টব্য, দয়া করে কুবা ওবারের এই উত্তরের নীচে সহায়ক মন্তব্যগুলি দেখুন, যা আমাকে কিছুটা সরল হতে পারে কিনা তা অবাক করে দেয়।
event
। সিগন্যাল ও স্লট, হয় মূর্তভাবে , পদ্ধতি, যখন সংযোগ প্রক্রিয়া একটি ডাটা স্ট্রাকচার যেমন সংযুক্ত তালিকাভুক্ত এক বা একাধিক স্লট ডাকা সংকেত দেয়। আমি আশা করি আপনি দেখতে পাচ্ছেন যে সিগন্যাল / স্লটগুলির সাথে কিছু "সাবসেট" বা ইভেন্টগুলির "বৈকল্পিক" হিসাবে কথা বলা বাজে কথা। তারা সত্যিই ভিন্ন জিনিস যে ঘটতে কিছু উইজেট প্রেক্ষাপটে অনুরূপ প্রান্ত ব্যবহার করা। এটাই. আপনি যত বেশি সাধারণীকরণ করবেন ততই আপনি আইএমএইচও হয়ে উঠবেন helpful
টিএল; ডিআর: সংকেত এবং স্লটগুলি পরোক্ষ পদ্ধতি কল। ইভেন্টগুলি ডেটা স্ট্রাকচার। সুতরাং তারা বেশ ভিন্ন প্রাণী।
কেবল তখনই যখন তারা একত্রিত হয় যখন থ্রেড সীমানা জুড়ে স্লট কল করা হয়। স্লট কল আর্গুমেন্ট একটি ডেটা স্ট্রাকচারে প্যাক আপ হয়ে থাকে এবং থ্রেডের ইভেন্টের সারিটিতে ইভেন্ট হিসাবে প্রেরণ হয়। প্রাপ্ত থ্রেডে, QObject::event
পদ্ধতিটি আর্গুমেন্টগুলি প্যাক করে, কলটি কার্যকর করে এবং সম্ভবত এটি যদি কোনও ব্লকিং সংযোগ থাকে তবে ফলাফলটি ফিরিয়ে দেয়।
আমরা যদি বিস্মৃতিতে সাধারণীকরণ করতে ইচ্ছুক হই, তবে কেউ ঘটনাটিকে লক্ষ্য অবজেক্টের event
পদ্ধতিটি আহ্বানের উপায় হিসাবে ভাবতে পারে । এটি কোনও ফ্যাশনের পরেও পরোক্ষ পদ্ধতির কল but তবে এটি সত্য বিবৃতি না হলেও, এটি এটি সম্পর্কে চিন্তাভাবনার সহায়ক উপায় বলে আমি মনে করি না।
ইভেন্টগুলি (ব্যবহারকারী / ব্যবহারকারী ইন্টারঅ্যাকশনের সাধারণ অর্থে) সাধারণত Qt এ সংকেত / স্লট সহ পরিচালনা করা হয় তবে সংকেত / স্লট প্রচুর পরিমাণে অন্যান্য কাজ করতে পারে।
কিউভেন্ট এবং এর সাবক্লাসগুলি আপনার কোডের সাথে যোগাযোগের জন্য ফ্রেমওয়ার্কের জন্য মূলত কেবলমাত্র কিছুটা মানযুক্ত ডেটা প্যাকেজ। আপনি যদি কোনও উপায়ে মাউসের প্রতি মনোযোগ দিতে চান তবে আপনাকে কেবল কিউমাউসএভেন্ট এপিআইটি দেখতে হবে এবং লাইব্রেরি ডিজাইনারদের প্রতিবার চাকাটি পুনরায় উদ্ভাবন করতে হবে না যখন মাউসের কোনও কোনও কোণে কী করেছে তা নির্ধারণ করতে হবে Qt API।
এটি সত্য যে আপনি যদি কোনও ধরণের ইভেন্টের (আবার সাধারণ ক্ষেত্রে) অপেক্ষা করতে থাকেন তবে আপনার স্লট প্রায় অবশ্যই একটি আর্গুমেন্ট হিসাবে একটি QEvent সাবক্লাস গ্রহণ করবে।
যা বলা হয়েছিল, সংকেত এবং স্লট অবশ্যই কিউভেেন্টস ছাড়াই ব্যবহার করা যেতে পারে, যদিও আপনি দেখতে পাবেন যে একটি সংকেত সক্রিয় করার জন্য মূল উত্সাহটি প্রায়শই একরকম ব্যবহারকারীর ইন্টারঅ্যাকশন বা অন্যান্য অ্যাসিনক্রোনাস কার্যকলাপ হতে পারে। কখনও কখনও, তবে, আপনার কোড ঠিক এমন একটি জায়গায় পৌঁছে যাবে যেখানে কোনও নির্দিষ্ট সিগন্যাল ফায়ার করা সঠিক কাজ হবে। উদাহরণস্বরূপ, দীর্ঘ প্রক্রিয়া চলাকালীন একটি অগ্রগতি বারের সাথে সংযুক্ত সিগন্যাল থেকে গুলি চালানো সেই বিন্দু পর্যন্ত কোনও QEvent জড়িত না।
লেও উই খেংয়ের 'ইভেন্ট প্রসেসিং' পড়ার সময় আমি এই প্রশ্নটি পেয়েছি । এটি আরও বলে:
জেসমিন ব্ল্যানচেট বলেছেন:
আপনি স্ট্যান্ডার্ড ফাংশন কল, বা সিগন্যাল এবং স্লটগুলির চেয়ে ইভেন্টগুলি কেন ব্যবহার করবেন তার মূল কারণ হ'ল ইভেন্টগুলি সিঙ্ক্রোনসিভ এবং অ্যাসিনক্রোনালি উভয়ই ব্যবহার করা যেতে পারে (আপনি সেন্ডইভেন্ট () বা পোস্ট-এজেন্টস ()) কল করেন, যেখানে কোনও ফাংশন কল করা বা প্রার্থনা করা হয় তার উপর নির্ভর করে একটি স্লট সর্বদা সমকালীন হয়। ইভেন্টগুলির আর একটি সুবিধা হ'ল এগুলি ফিল্টার করা যায়।
আরেকটি ছোট ছোট বাস্তববাদী বিবেচনা: সংকেত নির্গমন বা গ্রহণের জন্য উত্তরাধিকার সূত্রে প্রয়োজনীয়তা রয়েছে QObject
যেখানে কোনও উত্তরাধিকারের কোনও অবজেক্ট কোনও ইভেন্ট পোস্ট বা পাঠাতে পারে (যেহেতু আপনি প্রার্থনা করছেন QCoreApplication.sendEvent()
বা postEvent()
) এটি সাধারণত কোনও সমস্যা নয় তবে: পিকিউটি অদ্ভুতভাবে QObject
প্রথম সুপার বর্গ হতে হবে, এবং আপনি কেবলমাত্র সিগন্যাল প্রেরণে সক্ষম হয়ে নিজের উত্তরাধিকারের আদেশটি পুনর্বিন্যস্ত করতে চান না))
আমার মতে ঘটনাগুলি সম্পূর্ণ অপ্রয়োজনীয় এবং তা ফেলে দেওয়া যেতে পারে। সংকেতগুলি ইভেন্ট বা ইভেন্টগুলির দ্বারা সংকেতগুলির দ্বারা প্রতিস্থাপন করা যায়নি এমন কোনও কারণ নেই, কেবলমাত্র Qt যেমনটি ইতিমধ্যে সেট আপ করা আছে। সারিবদ্ধ সংকেতগুলি ইভেন্ট দ্বারা মোড়ানো হয় এবং ইভেন্টগুলি সম্ভবত সংকেত দ্বারা মোড়ানো হতে পারে, উদাহরণস্বরূপ:
connect(this, &MyItem::mouseMove, [this](QMouseEvent*){});
(তবে আর না) mouseMoveEvent()
পাওয়া সুবিধামতনের ফাংশনটি প্রতিস্থাপন করবে এবং এমন কোনও সংকেত হ্যান্ডেল করবে যে কোনও দৃশ্যের পরিচালক তাকে আইটেমটির জন্য নির্গত করবে। কিছু বাইরের সত্তার দ্বারা আইটেমের পক্ষে সিগন্যাল নির্গত হওয়া বিষয়টি গুরুত্বহীন এবং Qt উপাদানগুলির বিশ্বে বেশিরভাগ ক্ষেত্রে ঘটে, যদিও এটি অনুমিত নয় যদিও (Qt উপাদানগুলি প্রায়শই এই নিয়মকে অবরুদ্ধ করে)। তবে কিউটি হ'ল বহুবিধ ডিজাইনের সিদ্ধান্তের একত্রিত এবং পুরানো কোড ভাঙার ভয়ে পাথর ফেলে দেওয়া (যা প্রায়শই যথেষ্ট হয়)।QWidget
QQuickItem
mouseMove
QObject
যখন প্রয়োজন হয় তখন পিতা-মাতার চিত্তবিনোদন প্রচার করার সুবিধা রয়েছে । সিগন্যাল / স্লট সংযোগগুলি কোনও নির্দিষ্ট শর্ত পূরণ করার পরে প্রত্যক্ষ বা পরোক্ষভাবে কোনও ফাংশন কল করার প্রতিশ্রুতি। সংকেত এবং স্লটগুলির সাথে কোনও সম্পর্কিত হ্যান্ডলিং শ্রেণিবিন্যাস নেই।
accepted
একটি সিগন্যালে রেফারেন্স প্যারামিটার যুক্ত করতে পারেন এবং স্লটগুলি এটি পরিচালনা করে বা আপনার accepted
ক্ষেত্র সহ রেফারেন্স প্যারামিটার হিসাবে কাঠামো থাকতে পারে । তবে কিউটি ডিজাইনের পছন্দগুলি তৈরি করেছে এবং সেগুলি এখন পাথরে সেট করা আছে।