Ниже я реализовал минимальный проверяемый пример, который воспроизводит проблему. Проблема заключается в том, что после того, как обратный отсчет QLabel
доходит до 00:00
, я хочу, чтобы приложение закрывалось автоматически. Но этого не происходит, и я получаю от компилятора следующую ошибку:
non-object type 'char *(const char *, int) throw()' is not assignable
Ниже приведен минимальный проверяемый пример кода
mainwindow.h
#include <QMainWindow>
#include <QTime>
#include <QTimer>
#include <QProcess>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void stopAtZeroCountDown();
public slots:
void timerUpdate();
private:
Ui::MainWindow *ui;
QTimer *timer;
QTime time;
QProcess *stopAtZero;
};
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
stopAtZeroCountDown();
ui->countDown->setText("1:00");
time.setHMS(0,1,0);
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::stopAtZeroCountDown()
{
this->stopAtZero = new QProcess(this);
this->stopAtZero->setProcessChannelMode(QProcess::MergedChannels);
connect(this->stopAtZero, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
[this](int exitCode, QProcess::ExitStatus exitStatus){
qDebug() << "[EXEC] FINISHED: " << exitCode << exitStatus;
index = ui->countDown->setText("00:00"); // <-- Error here
if(&index)
{
this->stopAtZero->start(QStringLiteral("/bin/sh"), QStringList() << QStringLiteral("/path/to/shutdown_executable.sh"));
};
});
}
void MainWindow::timerUpdate()
{
time = time.addSecs(-1);
ui->countDown->setText(time.toString("mm:ss"));
}
Ниже ошибка компиляции, а также здесь
/home/emanuele/catkin_docking_ws/src/lidarlauncher/src/lidarlauncher/mainwindow.cpp: In lambda function: /home/emanuele/catkin_docking_ws/src/lidarlauncher/src/lidarlauncher/mainwindow.cpp:113:40: error: could not convert ‘this->MainWindow::ui->Ui::MainWindow::<anonymous>.Ui_MainWindow::labelCountDown->QLabel::setNum(0)’ from ‘void’ to ‘bool’ if(ui->labelCountDown->setNum(00))
EDIT_2
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//ui->countDown->setText(time.toString("hh:mm:ss"));
ui->countDown->setText("1:00");
//ui->countDown->setText(time.toString("mm:ss"));
time.setHMS(0,1,0);
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(1000);
connect(this->stopAtZero, &QProcess::readyReadStandardOutput, [this, script = this->stopAtZero](){
QString s = QString::fromUtf8(script->readAll());
qDebug() << "[EXEC] DATA: " << s;
if (ui->countDown->setText("00:00")) { // <-- error here
this->stopAtZero->start(QStringLiteral("/bin/sh"), QStringList() << QStringLiteral("/home/emanuele/catkin_docking_ws/src/lidarboatsproject/stop_lidar_deck_and_gui.sh"));
}
});
}
До сих пор я консультировался с следующим источником, чтобы помочь мне решить проблему, но безуспешно. . Я знаю, что проблема вызвана назначением, которое должно быть QString
, поскольку я пытаюсь зафиксировать формат 00:00
таймера.
Я также проконсультировался с этим, это и все это - наглядные примеры для меня , с той лишь разницей, что здесь я использую компоненты qt, такие как в данном случае QLabel
, это может быть простая ошибка, но я немного запутался.
Спасибо за указание на правильное направление для решения этой проблемы.
index
? И что бы это ни было, что, по-вашему, должно означатьif (&index)
? - person Mat   schedule 09.06.202000:00
обратного отсчета и, если это правда, закрыть приложение. Сindex
я пытаюсь поймать00:00
. - person Emanuele   schedule 09.06.2020