Автоматически обновляет QDateTimeEdit, чтобы отображать текущую системную дату и время

Используя библиотеку Qt, есть ли способ автоматического обновления QDateTimeEdit используя сигнал, чтобы виджет отображал текущую дату и время аналогично часам?

В приведенном ниже примере кода dateTimeEditSystem это QDateTimeEdit объект. Тем не менее setDateTime() Функция действует только один раз. Я хотел бы QDateTimeEdit объект для динамического обновления. Есть ли надежный способ сделать это без использования таймера (то есть с сигналами и слотами)? Или таймер единственный способ сделать это?

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// setup the UI
ui->setupUi(this);
// set the current date and time
ui->dateTimeEditSystem->setDateTime( QDateTime::currentDateTime() );
}

Я пытался использовать таймер, но, к сожалению, QDateTimeEdit не обновлялся. Вот полный код mainwindow.cpp. Что я здесь не так делаю?

#include <QTimer>

#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->dateTimeEditSystem->setDateTime( QDateTime::currentDateTime() );

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT( updateTime() ));
timer->start(1000);
}

void MainWindow::updateTime()
{
ui->dateTimeEditSystem->setDateTime( QDateTime::currentDateTime() );
}

MainWindow::~MainWindow()
{
delete ui;
}

ОБНОВИТЬ:

Это на самом деле очень легко сделать. Причина, по которой код не обновлялся, была из-за отсутствия объявления слота в файле mainwindow.h. Вот полное содержимое заголовка mainwindow.h.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;

private slots:
void updateTime();

};

#endif // MAINWINDOW_H

1

Решение

Автоматическое обновление QDateTimeEdit или любой другой виджет часов в Qt легко выполняется с помощью QTimer, Обратитесь к следующим примерам, чтобы узнать, как это сделать:

http://qt-project.org/doc/qt-4.8/widgets-digitalclock.html

ИЛИ ЖЕ

http://qt-project.org/doc/qt-4.8/widgets-shapedclock.html

Обратите внимание, что разрешение QTimer различается в разных операционных системах, но для обновлений, которые должны происходить ~ 1 секунда за раз, QTimer должно быть хорошо практически на всех платформах. Обратитесь к следующему для получения дополнительной информации о разрешении QTimer:

http://qt-project.org/doc/qt-4.8/QTimer.html#accuracy-and-timer-resolution

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]