标签: qprogressbar

从不同的线程更新QProgressbar

我已经开发了自己的混合流密码,对于GUI,我使用的是Qt.最初我是在单个线程上编写的,但它是一个流密码,当在大文件上运行时,GUI功能失调.所以我将加密/解密转移到单独的Qthread.为了显示进度,我在GUI上包含了一个标准的QProgressbar.但是当我运行文件I/O时,加密/解密工作完美但进度条没有正确更新.整个操作完成后,进度条突然从0%变为100%,表明在操作过程中没有机会更新.对于代码,我将完成的百分比从FileCrypto发送到主GUI线程到QProgressbar的setValue(int)插槽.由于它不起作用,我还尝试将一个int poitner发送到FileCrypto线程,同时用百分比更新指针并在GUI线程上使用QTimer在本地检查int值的值并更新进度条但仍然我得到了完全相同的结果.

这是我的代码:

FileCrypto类:

#include <QThread>
#include <QFile>
#include <PolyVernam.h>  //my algo header

class FileCrypto : public QThread
{
    Q_OBJECT

public:
    FileCrypto(QString, QString, int);
    bool stopIt;

protected:
    void run();

signals:
    void completed(int);
    void msg(QString);
    void pathMsg1(QString);
    void pathMsg2(QString);
    void keyMsg(QString);

private:
    QFile src, dest;
    QString tag;
    int mode;
    qint64 length;
    PolyVernam pv;
};
Run Code Online (Sandbox Code Playgroud)

代码:

#include <FileCrypto.h>

FileCrypto::FileCrypto(QString input, QString keyFile, int mode)
{
    stopIt = false;
    this->mode = mode;
    src.setFileName(input);

    if(mode == 1)
    {
        emit msg("Current Encryption/Decryption status: Encrypting file... …
Run Code Online (Sandbox Code Playgroud)

qt cryptography file qprogressbar qthread

2
推荐指数
1
解决办法
2483
查看次数

qt覆盖paintEvent的麻烦

我在自定义小部件中继承了QProgressBar,并使用以下代码覆盖了paintEvent方法:


void myProg::paintEvent(QPaintEvent *pe)
{
    QProgressBar::paintEvent(pe);
    QRect region = pe->rect();
    QPainter *painter = new QPainter(this);
    QPen *pen = new QPen;
    painter->begin(this);
    painter->setBrush(Qt::red);
    int x = this->x();
    int y = this->y();
    pen->setWidth(10);
    painter->setPen(*pen);
    painter->drawLine(x,y,x+100,y);
    painter->end();

}
Run Code Online (Sandbox Code Playgroud)

我试图显示一条红线作为起点,看看我可以将自己的修改添加到小部件.但是,这不起作用.我只将小部件视为常规QProgressBar.关于什么可能出错的任何想法?

c++ qt widget qprogressbar

1
推荐指数
1
解决办法
1万
查看次数

如何实现QProgressBar进行繁重的计算?

我正在开发QT中的GUI,它根据用户输入执行一些繁重的计算.我在函数中执行所有计算,比如start_computation(),因为start_computation()函数被称为我的GUI挂起,因为它忙于执行start_computation()函数.所以,我想使用QProgressBar让用户知道GUI正在后台执行某项任务.

在这种情况下实施QProgressBar的最佳方法是什么?

c++ qt qt-creator qprogressbar

1
推荐指数
1
解决办法
674
查看次数

PyQt5:使用 QThread 弹出进度条

如何在弹出窗口中实现一个进度条,该窗口通过QThread监视来自所谓的 Worker 类(即时间/CPU 消耗任务)的运行函数的进度?

我已经检查了无数示例和教程,但进度条显示在弹出窗口中的事实似乎使一切变得更加困难。我相信我想要的是一件相当简单的事情,但我一直在失败,而且我的想法也用完了。

我有一个我想要实现的例子,它基于这个答案

import sys
import time
from PyQt5.QtCore import QThread, pyqtSignal, QObject, pyqtSlot
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget, QHBoxLayout, QProgressBar, QVBoxLayout


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Widget")
        self.h_box = QHBoxLayout(self)
        self.main_window_button = QPushButton("Start")
        self.main_window_button.clicked.connect(PopUpProgressB)
        self.h_box.addWidget(self.main_window_button)
        self.setLayout(self.h_box)
        self.show()


class Worker(QObject):
    finished = pyqtSignal()
    intReady = pyqtSignal(int)

    @pyqtSlot()
    def proc_counter(self):  # A slot takes no params
        for i in range(1, 100):
            time.sleep(1)
            self.intReady.emit(i)

        self.finished.emit()


class PopUpProgressB(QWidget):

    def …
Run Code Online (Sandbox Code Playgroud)

python pyqt qprogressbar qthread pyqt5

1
推荐指数
2
解决办法
2196
查看次数

标签 统计

qprogressbar ×4

qt ×3

c++ ×2

qthread ×2

cryptography ×1

file ×1

pyqt ×1

pyqt5 ×1

python ×1

qt-creator ×1

widget ×1