如何初始化QProgressBar的操作,我已经声明了她的最大值、最小值、范围和值。
我想吸收QProgressBar的进展;sleep_for";作用
当前代码:
void MainPrograma::on_pushCorre_clicked()
{
QPlainTextEdit *printNaTela = ui->plainTextEdit;
printNaTela->moveCursor(QTextCursor::End);
printNaTela->insertPlainText("corrida iniciadan");
QProgressBar *progresso = ui->progressBar;
progresso->setMaximum(100);
progresso->setMinimum(0);
progresso->setRange(0, 100);
progresso->setValue(0);
progresso->show();
WORD wEndereco = 53606;
WORD wValor = 01;
WORD ifValor = 0;
EscreveVariavel(wEndereco, wValor);
//How to assimilate QProgressBar to this function:
std::this_thread::sleep_for(std::chrono::milliseconds(15000));
//StackOverFlow help me please
EscreveVariavel(wEndereco, ifValor);
使用QTimer
并且在时隙中更新进度条的值
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
t = new QTimer(this);
t->setSingleShot(false);
c = 0;
connect(t, &QTimer::timeout, [this]()
{ c++;
if (c==100) {
c=0;
}
qDebug() << "T...";
ui->progressBar->setValue(c);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
t->start(100);
}
我不确定你对这种睡眠的意图:你在模拟漫长的等待吗?在这个过程中,你有关于进展的反馈吗?它是一个阻塞任务(如示例所示(还是异步任务?
作为一个直接的答案(固定的等待时间,阻塞(,我认为用较小的睡眠进行循环就足够了,比如:
EscreveVariavel(wEndereco, wValor);
for (int ii = 0; ii < 100; ++ii) {
progresso->setValue(ii);
qApp->processEvents(); // necessary to update the UI
std::this_thread::sleep_for(std::chrono::milliseconds(150));
}
EscreveVariavel(wEndereco, ifValor);
请注意,由于线程调度和UI刷新,您可能会等待更长的时间。
对于异步任务,您应该传递要更新的进度条,或者进行此类更新的某种回调。请记住,UI只能从主线程刷新。