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