除了贝尔实验室的语言其他语言全都不用 2024-06-11 08:03 采纳率: 71.4%
浏览 2
已结题

QWidget和QTimer可以同时继承吗

最近在使用QT的定时器,网友推荐的做法是使用信号和槽机制,但是我不想使用,我想直接继承QTimer和QWidget 他们两个同属于QObject基类,是否可以利用多重继承的特性来同时继承这两个类呢?然后重载timeEvent方法来处理定时器,下面是我的调用方法

class MyClass : public QWidget,public QTimer{

public:

MyClass(QWidget * p):QWidget(p),QTimet(p){

QTimer::start(200);//直接启动定时器

}

void timerEvent(QTimer event * event){

//这里处理定时器任务

}

};

以上代码我做了测试,的确是可以正常使用,我想问的是,这样的做法到底合不合法呢?因为他们推荐的都是使用信号和槽机制

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-06-11 08:04
    关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    多重继承并不允许你同时继承两个基类,因为它们各自拥有自己的状态空间。

    然而,如果你想要利用多重继承的功能,你可以先创建一个派生类(子类)并覆盖timerEvent函数。在这个派生类中,你可以实现你想要的任务,并添加适当的信号和槽。

    例如,假设你需要记录当定时器触发时的事件,你可以在你的派生类中定义一个变量来存储这些信息:

    class MyClass : public QWidget,public QTimer {
    
    public:
    
        MyClass(QWidget *p) : QWidget(p),QTimet(p){
            QTimer::start(200);
        }
    
        void timerEvent(QTimerEvent *event){
            if(event->isUserReset()) {
                // 这里处理定时器任务
                int value = (int)(event->time() * 1000); // 根据时间计算值
                std::cout << "Timer Event: " << value << std::endl;
            }
        }
    
    private:
        int counter; // 记录计数器的值
    };
    

    这样,当定时器触发时,你就可以在子类中访问counter变量以获取特定的信息。虽然多重继承不能让你同时继承两个基类,但如果你需要结合使用其他功能(如信号和槽),那么上述方法应该足够满足你的需求。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 已采纳回答 6月13日
  • 创建了问题 6月11日