1

使用 Qt 库,有没有一种方法可以QDateTimeEdit使用信号自动更新 a,以便小部件以类似于时钟的方式显示当前日期和时间?

在下面的代码示例中,dateTimeEditSystemQDateTimeEdit对象。但是,该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
4

1 回答 1

1

使用. QDateTimeEdit_ QTimer有关如何完成此操作,请参阅以下示例:

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

或者

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

请注意,a 的分辨率QTimer在不同的操作系统上有所不同,但对于需要一次大约 1 秒的更新,aQTimer在几乎所有平台上都应该没问题。有关分辨率的更多信息,请参阅以下内容QTimer

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

于 2012-10-12T01:17:25.663 回答