我需要为 QTimeEdit 制作适配器,以将其与 time_t 一起使用:

  • 构造函数QTimeEdit(time_t)
  • void setTime(time_t)
  • time_t time()
    我做了1.及其工作。
  • class QTimeEditAdapter: public QTimeEdit {
    public:
        QTimeEditAdapter(time_t t) {
            tm1 = t;
            tm *ltm = localtime(&tm1);
            int hours = ltm->tm_hour;
            int min = ltm->tm_min;
            this->setTime(QTime(hours,min));
        }
    private:
        time_t tm1;
    };
    int main(int argc, char *argv[])
    {
        time_t tm1;
        tm1 = time(NULL);
    
        //other qt widgets code
    
        QTimeEdit* timeEdit = new QTimeEditAdapter(tm1);
    
        //more other qt widgets code
    
    

    但是如果我通过添加来适应setTime
    void setTime(time_t t1)
    

    到类中,它重新定义了setTime,而构造函数和方法setTime都给我带来了错误。
    我没有在QTimeEdit中找到任何其他设置时间的方法,但我想肯定有比我更好的方法

    最佳答案



    在派生类和基类之间无法基于参数列表进行函数重载。如果您拨打类似this->setTime(QTime(hours,min));的电话,其中thisQTimeEditAdapter,则在过载解析中仅考虑新的QTimeEditAdapter::setTime(time_t)。这会导致编译错误。

    要解决此问题,您可以在构造函数中直接引用基类:

    QTimeEditAdapter::setTime(QTime(hours,min));
    

    但这不会帮助您适配器的其他用户访问原始setTime

    另一个解决方法是改为添加以下内容:
    void setTime(QTime qt)
    {
            QTimeEdit::setTime(qt);
    }
    

    这可以解决问题,但是现在您有责任枚举基类定义的所有(现在或将来)可能的重载。

    为了避免这些棘手的问题,最好为QTimeEditAdapter::setTime(time_t)方法选择一个不同的方法名称。

    关于c++ - 将QTimeEdit与time_t一起使用-适配器模式C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61147892/

    10-13 23:14