Saya memiliki segmen garis yang dapat diseret. Saya juga punya pengatur waktu. Segmen garis ini semakin terdistorsi ketika saya mengoperasikan timer di jendela ini.

protected:
   //  override / make our own of these function to track mouse movement and 
         void mousePressEvent(QMouseEvent *event) ;
         void mouseReleaseEvent(QMouseEvent *event) ;
         void mouseMoveEvent(QMouseEvent *event) ;

Saya perhatikan segmen garis ini semakin terdistorsi (lihat gambar) ketika saya mengaktifkan pengatur waktu (pada dasarnya ada jam digital untuk melihat waktu berjalan di sisi kiri widget).

enter image description here

Saya telah mengikuti tiga fungsi untuk pengatur waktu:

public slots:

        void update();
        void startStopTimer();
        void resetTimer();

  //slot
    connect(ui->pushButton_stimStart, &QPushButton::clicked, this, &ProgramKeyGripV2::startStopTimer);
    connect(ui->pushButton_stimStop, &QPushButton::clicked, this, &ProgramKeyGripV2::resetTimer);

    QTimer *timer2 = new QTimer(this);
    connect(timer2, SIGNAL(timeout()), this, SLOT(update()));
    timer2->start(10);


void ProgramKeyGripV2::startStopTimer()
{
    if(watch->isRunning()) {
        //ui->startStopButton->setText("Restart");
        watch->pause();
    }
    else {
        //ui->startStopButton->setText("Pause");
        watch->start();
    }

}

void ProgramKeyGripV2::resetTimer()
{
    ui->hundredthsText->setText("00");
    ui->secondsText->setText("00");
    ui->minutesText->setText("00");
    watch->reset();
}

void ProgramKeyGripV2::update()
{
    QPalette p = ui->secondsText->palette();
    if(watch->isRunning())
    {
        qint64 time = watch->getTime();
        int h = time / 1000 / 60 / 60;
        int m = (time / 1000 / 60) - (h * 60);
        int s = (time / 1000) - (m * 60);
        int ms = time - ( s + ( m + ( h * 60)) * 60) * 1000;
        int ms_dis = ms / 10;
        if(ms_dis < 10) {
            ui->hundredthsText->setText(QStringLiteral("0%1").arg(ms_dis));
        }
        else {
            ui->hundredthsText->setText(QStringLiteral("%1").arg(ms_dis));
        }
        if(s < 10) {
            ui->secondsText->setText(QStringLiteral("0%1").arg(s));
           // p.setColor(QPalette::Base, Qt::white);
            //ui->secondsText->setPalette(p);
        }
        else {
            ui->secondsText->setText(QStringLiteral("%1").arg(s));

        }
        if(m < 10) {
            ui->minutesText->setText(QStringLiteral("0%1").arg(m));
        }
        else {
            ui->minutesText->setText(QStringLiteral("%1").arg(m));
        }

    }

}

Masalah ini tidak ada jika saya menonaktifkan timer. Bisakah Anda menemukan masalah di sini?

0
Vinil 2 Juni 2020, 22:31

1 menjawab

Jawaban Terbaik

Mungkinkah metode pembaruan Anda bentrok dengan QWidget::update? (lihat https://doc.qt.io/qt-5/qwidget. html#perbarui)

Saya tidak sepenuhnya yakin tentang kelas apa yang menjalankan kode Anda (apa kelas dasar), tetapi sepertinya masalah yang masuk akal bagi saya. Coba ganti nama metode pembaruan Anda menjadi onTimeout atau semacamnya.

Juga, coba gunakan sintaks &YourClass::yourSlot alih-alih SLOT(yourSlot()), karena yang terakhir akan hilang.

2
e8johan 3 Juni 2020, 06:58