有没有人知道如何将时区包含在QDateTime的ISO字符串表示中?
我应该可以使用以下内容:
qDebug() << QDateTime::currentDateTime().toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)
但这总是以UTC格式出现:
2014-02-24T01:29:00Z
Run Code Online (Sandbox Code Playgroud)
目前,我正在解决这个问题的方法是通过显式设置偏移量来强制TimeSpec为Qt :: offsetFromUtc,这是我最初从QDateTime获得的.
QDateTime now = QDateTime::currentDateTime();
int offset = now.offsetFromUtc();
now.setOffsetFromUtc(offset);
qDebug() << now.toString(Qt::ISODate);
Run Code Online (Sandbox Code Playgroud)
这给出了最初的预期:
2014-02-24T01:29:00+02:00
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何以更清洁的方式做到这一点,还是必须将其记录为错误?
编辑:我正在使用Qt5.2.1
更新:
以下小程序显示了我的意思:
#include <QtCore/QDateTime>
#include <QtCore/QDebug>
int main(int argc, int argv){
qDebug() << QDateTime::currentDateTime().toString(Qt::ISODate);
qDebug() << QDateTime::currentDateTime().toTimeSpec(Qt::OffsetFromUTC).toString(Qt::ISODate);
QDateTime now = QDateTime::currentDateTime();
int offset = now.offsetFromUtc();
now.setOffsetFromUtc(offset);
qDebug() << now.toString(Qt::ISODate);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生成以下输出:
"2014-02-24T10:20:49"
"2014-02-24T08:20:49Z"
"2014-02-24T10:20:49+02:00"
Run Code Online (Sandbox Code Playgroud)
最后一行是预期的那一行.请注意,第二次转换为UTC,这不是想要的.
我写了一个快速而讨厌的程序来帮助我想象我正在研究的项目的一个方面.虽然自4.1.1以来我一直在使用Qt,但我从未真正需要使用QGraphics*模块.
当我开始使用该程序时,我正在使用运行Windows XP和Qt4.7.0以及Visual Studio 2008的旧计算机.我现在只是将文件复制到运行Windows 8的主计算机上.我已经决定给Qt5一个镜头,所以我用Qt5.0.2安装了QtCreator.
当我编译与我在Qt4.7.0/XP机器上创建的完全相同的代码时,我得到了截然不同的结果.
这就是我在Qt4.7.0编译中看到的:

这就是我在Qt5.0.2编译中看到的:

显然,每个矩形边框的绘图都有不同的行为.此外,如果我使用鼠标滚轮放大,Qt5编译中的矩形边框宽度会变大,但在Qt4.7编译中保持不变(大约1个像素宽).
如何更改代码以使Qt5中的行为与Qt4.7中的行为相同?
这是完整的代码:
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include <QWheelEvent>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QVariant>
#include <QSqlError>
#include <QMessageBox>
class ItemData : public QSqlRecord{
public:
ItemData(QSqlRecord const &rec) : QSqlRecord(rec) {}
qreal left() const { return value(0).toDouble(); }
qreal top() const { return value(1).toDouble(); }
qreal width() const { return value(2).toDouble() - left(); }
qreal height() const { return value(3).toDouble() - top(); }
QRectF rect() …Run Code Online (Sandbox Code Playgroud)