কিউটি কি ভার্চুয়াল খাঁটি স্লটকে সমর্থন করে?


97

আমার জিইউআই প্রকল্পে Qtঅনেকগুলি "কনফিগারেশন পৃষ্ঠাগুলি" শ্রেণি রয়েছে যা প্রত্যক্ষভাবে উত্তরাধিকার সূত্রে প্রাপ্ত QWidget

সম্প্রতি, আমি বুঝতে পেরেছি যে এই সমস্ত শ্রেণিতে 2 টি কমন্স স্লট ( loadSettings()এবং saveSettings()) ভাগ করা হয় ।

এটি সম্পর্কে আমার দুটি প্রশ্ন রয়েছে:

  • BaseConfigurationPageভার্চুয়াল খাঁটি পদ্ধতি হিসাবে এই দুটি স্লট সহ একটি মধ্যবর্তী বেস বিমূর্ত শ্রেণি (এটি নাম দিন ) লেখার অর্থ কী ? (প্রতিটি সম্ভাব্য কনফিগারেশন পৃষ্ঠাতে সর্বদা এই দুটি পদ্ধতি থাকবে, তাই আমি "হ্যাঁ" বলব)
  • আমি আমার কোডে ভারী পরিবর্তন করার আগে (যদি আমার করতে হয়): কিউটি কি ভার্চুয়াল খাঁটি স্লটকে সমর্থন করে? আমার কি সচেতন হওয়া উচিত?

এখানে সমস্ত কিছু বর্ণনা করার জন্য একটি কোড উদাহরণ রয়েছে:

class BaseConfigurationPage : public QWidget
{
  // Some constructor and other methods, irrelevant here.

  public slots:

    virtual void loadSettings() = 0;
    virtual void saveSettings() = 0;
};

class GeneralConfigurationPage : public BaseConfigurationPage
{
  // Some constructor and other methods, irrelevant here.

  public slots:

    void loadSettings();
    void saveSettings();
};

উত্তর:


164

হ্যাঁ, ঠিক নিয়মিত সি ++ খাঁটি ভার্চুয়াল পদ্ধতিগুলির মতো। এমওসি দ্বারা উত্পাদিত কোডটি খাঁটি ভার্চুয়াল স্লটকে কল করে তবে এটি ঠিক আছে যেহেতু বেস ক্লাসটি যাইহোক ইনস্ট্যান্ট করা যায় না ...

আবার, নিয়মিত সি ++ খাঁটি ভার্চুয়াল পদ্ধতির মতো, পদ্ধতিগুলি বাস্তবায়ন না করা পর্যন্ত ক্লাস তাত্ক্ষণিকভাবে চালু করা যায় না।

একটি জিনিস: সাবক্লাসে, আপনার আসলে ওভারডেন পদ্ধতিগুলি স্লট হিসাবে চিহ্নিত করার দরকার নেই। প্রথমত, তারা ইতিমধ্যে বেস শ্রেণিতে স্লট হিসাবে প্রয়োগ করা হয়েছে। দ্বিতীয়ত, আপনি কেবল এমওসি এবং সংকলকটির জন্য আরও কাজ তৈরি করছেন যেহেতু আপনি আরও একটি কোড যুক্ত করছেন (ক্ষুদ্রতর)। তুচ্ছ, তবে যাই হোক না কেন।

সুতরাং, এটি জন্য যান ..


4
আপনার সঠিক উত্তর জন্য ধন্যবাদ! ); আমি যত তাড়াতাড়ি সম্ভব এই পরীক্ষা করব
ereOn

4
সাবক্লাস থেকে স্লট স্পেসিফিকেশন সরিয়ে ফেলা সাবক্লাস এবং বেস ক্লাস কল করা থেকে বাধা দেয়! - ধন্যবাদ মানুষ!
fmuecke

কিউটি 5-এ অন্তত আপনি ব্যবহার করছেন যদি obj-ptr, member-func-ptr, obj-ptr, member-func-ptrসংস্করণ connect, কেউ আপনার স্লট করা প্রয়োজন ঘোষিত যেমন।
কাইল স্ট্র্যান্ড

কিছু সত্যই অদ্ভুত আচরণ যুক্ত করতে হবে: যখন আপনি সাবক্লাসের শিরোনামে স্লট হিসাবে ওভারডেড পদ্ধতিগুলি চিহ্নিত করেন, স্লটগুলি তাদের সাথে 0 সংযোগ সহ সর্বদা কল হয়ে যায় called চিত্রে যান!!!
বারদাও

2

বেসিক কনফিগারেশন পেজে কেবল স্লট

class BaseConfigurationPage : public QWidget
{
  // Some constructor and other methods, irrelevant here.

  public slots:

    virtual void loadSettings() = 0;
    virtual void saveSettings() = 0;
};

class GeneralConfigurationPage : public BaseConfigurationPage
{
  // Some constructor and other methods, irrelevant here.

    void loadSettings();
    void saveSettings();
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.