我需要为 QTimeEdit 制作适配器,以将其与 time_t 一起使用:
我做了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));
的电话,其中this
是QTimeEditAdapter
,则在过载解析中仅考虑新的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/