1

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
4

1 に答える 1

1

QDateTimeEditやその他の時計ウィジェットを Qt 内で自動的に更新するには、 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 秒の更新が必要な場合は、QTimer実質的にすべてのプラットフォームで a で問題ありません。の解像度の詳細については、次を参照してくださいQTimer

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

于 2012-10-12T01:17:25.663 に答える