QT常用控件之QTimer,QDialog,QLabel,QLineEdit,QProgressBar,QComboBox,QPushButton,QGridLayout

本文介绍了一个使用QT库创建进度条控件的示例程序。该程序演示了如何通过不同模式展示进度,包括标准进度条和对话框进度条,并提供了开始、暂停和继续的功能。

QT常用控件的组合

#ifndef PROGRESSBARWIDGET_H
#define PROGRESSBARWIDGET_H

#include <QWidget>
#include <QTimer>
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QProgressBar>   //显示进度条的控件
#include <QComboBox>
#include <QPushButton>
#include <QGridLayout>    //网格布局
class ProgressBarWidget : public QWidget
{
    Q_OBJECT
private:
    int tmp=0;
    bool flag=true;
    QLabel *FileNum;    //表示文件的数量
    QLineEdit *FileNumLineEdit;
    QLabel *ProgressType;
    QComboBox *comboBox;
    QGridLayout *mainLayout;
    QPushButton *btn;
    QProgressBar *qpb;
    QTimer *qtm;
private slots:
    void on_click_button();
    void time_out();
public:
    ProgressBarWidget(QWidget *parent = 0);
    ~ProgressBarWidget();
};

#endif // PROGRESSBARWIDGET_H

#include "progressbarwidget.h"
#include <QProgressDialog>    //这个显示进度条的慢速过程的进度框
#include <QFont>

ProgressBarWidget::ProgressBarWidget(QWidget *parent)
    : QWidget(parent)
{
    //完成界面的初始化
    QFont font("宋体", 12);
    setFont(font);
    setWindowTitle(tr("Progress"));
    resize(400,200);
    FileNum = new QLabel;
    FileNum->setText(tr("the file num"));   //文件的数目
    FileNumLineEdit = new QLineEdit;
    FileNumLineEdit->setText(tr("100000"));   //默认值
    ProgressType = new QLabel;
    ProgressType->setText(tr("the show type"));     //显示的类型
    comboBox = new QComboBox;
    comboBox->addItem(tr("progressBar"));   //第一种显示方式
    comboBox->addItem(tr("progressDialog"));      //第二种显示方式
    btn=new QPushButton(this);
    btn->setText("push");
    qpb=new QProgressBar(this);
    qpb->setValue(0);
    qpb->setFormat("%p%");    //按完成的百分比显示
    mainLayout=new QGridLayout(this);
    mainLayout->addWidget(FileNum,0,0);
    mainLayout->addWidget(FileNumLineEdit,0,1);
    mainLayout->addWidget(ProgressType, 1, 0);
    mainLayout->addWidget(comboBox,1,1);
    mainLayout->addWidget(qpb,2,0,1,2);  //在第二行第一列的位置插一个一行两列的进度条
    mainLayout->addWidget(btn,3,1);
    mainLayout->setMargin(15);    //设置间隔大小
    mainLayout->setSpacing(10);
    qtm=new QTimer(this);
    connect(btn,&QPushButton::clicked,this,&ProgressBarWidget::on_click_button);
    connect(qtm,&QTimer::timeout,this,&ProgressBarWidget::time_out);
}

void ProgressBarWidget::on_click_button(){
    bool ok;
    int num = FileNumLineEdit->text().toInt(&ok);     //把文本转换为int类型值
    if(comboBox->currentIndex() == 0){       //如果选择的是第一个的话ProgressBar模式
        qpb->setRange(0, num);      //设置范围,最小值和最大值
        if(flag==true){//设置标志位,因此可以实现按钮控制进度条
            qtm->start(10);//每十毫秒溢出一次
            flag=false;
        }
        else{
            qtm->stop();
            flag=true;
        }
    }
    else if(comboBox->currentIndex() == 1){
        //如果选择的是第二个显示方式的话, ProgressDialog
        QProgressDialog *progressDialog = new QProgressDialog(this);
        QFont font("宋体", 12);
        progressDialog->setFont(font);
        //采用模拟的方式进行显示,即显示进度的同时,其他窗口将不响应输入信号
        progressDialog->setWindowModality(Qt::WindowModal);
        /*
         * 在测试中会出现Dialog不显示,程序依旧进入假死状态。不显示的原因是QProgressDialog
         * 有一个智能延迟,默认一切短于4秒的操作都不显示Dialog,因为测试时的数据量往往很小,
         * 从而导致了问题,将这个值改小或者为0,就可以了。
        */
        progressDialog->setMinimumDuration(5000);   //设置进度条显示的等待时间,5秒
        progressDialog->setWindowTitle(tr("Please Wait"));   //设置标题的显示时间
        progressDialog->setLabelText(tr("Copying..."));
        progressDialog->setCancelButtonText(tr("Cancel"));     //退出按钮名字
        progressDialog->setRange(0,num);    //设置显示的范围
        for(int i =  1; i <= num; ++i)  {
            progressDialog->setValue(i);   //设置当前的值
            if(progressDialog->wasCanceled())  //如果检测到按钮取消被激活,就跳出去
                return;
        }
     }
}

void ProgressBarWidget::time_out(){
    bool ok;
    int num = FileNumLineEdit->text().toInt(&ok);     //把文本转换为int类型值
    tmp++;
    qpb->setValue(tmp);
    if(tmp==num){
        qtm->stop();
    }
}

ProgressBarWidget::~ProgressBarWidget()
{

}


使用cx_Freeze写一个打包成mac,windows的脚本。目录结构为,在本工程目录下有detail_page.py,server_manager.py(入口文件),ssh_manger.py ,resource(这是一个文件夹,下面有几个文件,这几个文件那三个python文件会用到) import sys import re import json import os import base64 import hashlib import logging import shutil from threading import Thread, Event from PyQt5.QtWidgets import ( QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QTableWidget, QTableWidgetItem, QDialog, QLineEdit, QLabel, QFormLayout, QMessageBox, QHeaderView, QInputDialog, QGridLayout, QGroupBox, QScrollArea, QProgressDialog, QTabWidget, QTabBar ) from PyQt5.QtCore import Qt, QThread, pyqtSignal from PyQt5.QtGui import QFont, QIcon, QFontMetrics import time import detail_page import ssh_manger import sys import os import time import json import threading import base64 import hashlib import shutil import subprocess import psutil import logging # 添加日志模块 from datetime import datetime from PyQt5.QtWidgets import ( QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QProgressBar, QTableWidget, QTableWidgetItem, QHeaderView, QTextEdit, QPushButton, QSplitter, QListWidget, QGroupBox, QScrollArea, QMessageBox, QComboBox, QAbstractItemView, QSizePolicy, QFileDialog, QProgressDialog ) from PyQt5.QtCore import Qt, QTimer, QThread, pyqtSignal, QObject from PyQt5.QtGui import QFont, QColor, QBrush, QIcon, QPainter import ssh_manger import re import paramiko from threading import Thread, Event import time import os import stat import logging import socket import random 这是引入的库
最新发布
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~青萍之末~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值