【问题标题】:How to change system time of a linux device with Qt?如何使用 Qt 更改 linux 设备的系统时间?
【发布时间】:2023-01-24 21:57:27
【问题描述】:

我目前正在设计一个用户界面,该界面需要显示当前日期和时间,并允许用户稍后在设置中编辑当前时间和日期。

我今天已经阅读了很多关于这个问题的文章,但我找不到适合我的解决方案。 我试图通过创建 QProcess 对象并在我的用户界面适用的 linux 设备上执行命令来解决 QProcess 的问题。当我尝试设置时间时,我似乎只是在与“日期”命令作斗争。

这是我当前使用“date”命令更改 linux 设备系统时间的代码。

我的问题是,如果我用“args << ...”行注释运行我的程序,它会显示当前系统时间的 StdOut。但是,如果我使用 args 运行代码并尝试设置时间,对于每种可能的格式,我总是会收到相同的错误消息 StdError "date: invalid date '"Mon Jan 23 09:30:17 UTC 2023"'。我已经尝试了很多不同的格式和变体如何设置时间,但我总是收到相同的错误消息。

    QProcess task;
    QString command;
    QStringList args;

    command = "date";
    // I tried many different time formats but all of seem to be invalid

    args << "--set=\"Mon Jan 23 09:30:17 UTC 2023\"";
    task.start(command, args);
    task.waitForFinished();

    QString StdOut = task.readAllStandardOutput();
    QString StdError = task.readAllStandardError();

    ui->lineEdit_13->setText(StdOut);
    ui->lineEdit_14->setText(StdError);

有谁知道我的问题可能是什么以及如何解决?我肯定不会那么难改变设备的时间。

预先感谢您的回答:)

【问题讨论】:

  • 可能需要一个 shell 来执行日期命令?
  • 你是什​​么意思?我怎样才能得到一个壳?
  • 应该是args &lt;&lt; "--set=Mon Jan 23 09:30:17 UTC 2023";。引号是针对 shell 的,但您不会在这里查看 shell。
  • @Thomas 我也试过不带引号,它给了我同样的错误信息。我完全放弃了 QProcess 的概念,并使用 dateTimeWidget 找到了一个超级简单的解决方案。

标签: linux qt date qprocess


【解决方案1】:

你能试试:

args << QStringLiteral("-s")
     << QStringLiteral("Mon Jan 23 09:30:17 UTC 2023");

这可能是引号的问题。

另外请注意,您需要以足够的访问权限运行您的应用程序才能修改系统日期。

【讨论】:

    【解决方案2】:

    Sooo 我找到了一种非常简单的方法来更改用于我的应用程序的我的显示器的系统时间。 我多次读到纯 Qt 无法更改系统时间,但这是一个天大的谎言。

    你根本不需要 QProcess。请注意这个仅适用于 linux 设备

    我使用了 dateTimeWidget。我只是把它放在我应用程序的可见区域旁边,这样我就可以访问它的功能。

    所以要在 Qt 中更改系统时间,我使用了以下代码行

    ui->dateTimeWidget->setCTime(jahr_val,monat_val, tag_val, stunde_val, minute_val, sekunde_val, true);
    

    最后一个参数需要为真才能将您刚刚设置的时间与系统时钟同步。 就这么简单。

    【讨论】: