Qt 实现滑块 进度条绑定 背景颜色切换 设置进度条 打印进度条参数 打开文件等操作
显示图片 显示gif图片等功能
可能比较杂乱 上个图
首先添加资源文件
项目右键 Add New qt resource file 取个名字
添加前缀 我这里前缀写的/
添加文件 把想要的文件添加进来 我添加的是一张图片 一张gif
从这个路径下可以直接取到资源 下面上一下代码 项目结构如下
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include"QFileInfoList"
#include"QTreeWidgetItem"
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QFileInfoList allfile(QTreeWidgetItem *root,QString path);
private slots:
void on_openFile_clicked();
void openfile();
void paintEvent(QPaintEvent *);
void on_btnchange_clicked();
void on_comboBox_activated(const QString &arg1);
void on_comboBox_activated(int index);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QDebug"
#include"QTreeWidget"
#include"QDir"
#include"QDebug"
#include"QFileDialog"
#include"QListWidgetItem"
#include"QPainter"
#include"QMovie"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->file, SIGNAL(clicked()), this, SLOT(openfile()));
connect(ui->btnGet,&QPushButton::clicked,[=](){
qDebug()<<ui->widget->getNum();
});
connect(ui->btnset,&QPushButton::clicked,[=](){
ui->widget->serNum(50);
});
QMovie *movie=new QMovie(":/iamge/1122.gif");
ui->lbm->setMovie(movie);
movie->start();
// QTreeWidgetItemIterator it(ui->treeWidget);
// while (*it) {
// //do something
// qDebug()<<it.All;
// (*it)->text(0);
// ++it;
//}
}
//画一张图片
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawLine(QPoint(0,0),QPoint(100,100));//画线
painter.drawPixmap(100,100,QPixmap(":/iamge/11.jpg")); //画一个图 资源文件里的
// painter.drawPixmap(200,200,QPixmap(":/iamge/2222.jpg"));
painter.save();
painter.translate(200,100);
painter.drawLine(QPoint(0,0),QPoint(50,50));
painter.drawLine(QPoint(0,0),QPoint(100,70));
painter.restore();//还原
//背景设置成红色
// painter.setPen(Qt::NoPen);
// painter.setBrush(Qt::red);
// painter.drawRect(rect());
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_openFile_clicked()
{
qDebug()<<"Hello Qt!";
QString fileName = QFileDialog::getOpenFileName(this,tr("选择日志文件"),
"",tr("TXT(*.txt)")); //选择路径
if (fileName.isEmpty()) //如果未选择文件便确认,即返回
return;
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
QByteArray line = file.readLine();
QString str(line);
//m_requestLineEdit->setText(line);
qDebug()<<"读取到的"+line;
}
file.close();
}
}
void MainWindow::openfile()
{
qDebug()<<"openfile!";
QString fileName = QFileDialog::getOpenFileName(this,"打开文件",
"",tr("all file(*);;TXT(*.txt*);;Images (*.png *.xpm *.jpg)")); //选择路径
if (fileName.isEmpty()) //如果未选择文件便确认,即返回
return;
QFile file(fileName);
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
QByteArray line = file.readLine();
QString str(line);
//m_requestLineEdit->setText(line);
ui->listWidget->addItem(str);
qDebug()<<"读取到的"+line;
}
file.close();
}
}
void MainWindow::on_btnchange_clicked()
{
setStyleSheet("QMainWindow {"
" color: rgb(85, 255, 255);"
"background-color :rgb(0, 255, 0);}"
);
}
void MainWindow::on_comboBox_activated(const QString &arg1)
{
qDebug()<<arg1;
//这里也可以用来修改背景颜色 我用的是下面方式 所以注释了
// if(arg1=="blue"){
// setStyleSheet("QMainWindow {"
// "background-color :rgb(0, 255, 255);}"
// );
// }
}
void MainWindow::on_comboBox_activated(int index)
{
qDebug()<<index; //返回序号
switch(index){
case 0 :
setStyleSheet("QMainWindow {"
"background-color :rgb(0, 255, 255);}"
);
break;
case 1 :
setStyleSheet("QMainWindow {"
"background-color :rgb(0, 255, 0);}"
);
break;
case 2 :
setStyleSheet("QMainWindow {"
"background-color :rgb(255, 255, 0);}"
);
break;
}
}
smallwidget.h
#ifndef SAMLLWIDGET_H
#define SAMLLWIDGET_H
#include <QWidget>
namespace Ui {
class Samllwidget;
}
class Samllwidget : public QWidget
{
Q_OBJECT
public:
explicit Samllwidget(QWidget *parent = nullptr);
~Samllwidget();
void serNum(int num); //这里拼错了 应该是set
int getNum();
void setProgressValue(int num);
private slots:
void progress();
private:
Ui::Samllwidget *ui;
void openfile();
};
#endif // SAMLLWIDGET_H
samllwidget.cpp
#include "samllwidget.h"
#include "ui_samllwidget.h"
Samllwidget::Samllwidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Samllwidget)
{
ui->setupUi(this);
void(QSpinBox:: * spSignal)(int) =&QSpinBox::valueChanged;//函数指针 消除函数重载
//绑定spinBox 滑块 还要进度条
connect(ui->spinBox,spSignal,ui->horizontalSlider,&QSlider::setValue);
connect(ui->horizontalSlider,&QSlider::valueChanged,ui->spinBox,&QSpinBox::setValue);
connect(ui->spinBox,spSignal,[=](){
ui->progressBar->setValue(ui->spinBox->value());
});
}
//这里好像没用 我没删除 先放着
void Samllwidget::progress()
{
//ui->progressBar->setValue(ui->spinBox->value());
}
Samllwidget::~Samllwidget()
{
delete ui;
}
//下面就是一歇get/set
void Samllwidget::setProgressValue(int num)
{
ui->progressBar->setValue(num/100);
}
void Samllwidget::serNum(int num)
{
ui->spinBox->setValue(num);
}
int Samllwidget::getNum()
{
return ui->spinBox->value();
}
还有个smallwidget里面的自定义控件讲解
创建一个smallwidget.ui
里面放这三个控件 在mainwindow.ui中添加一个widget 用来放这三个控件 右键提升窗口部件 输入类名称 我这里就是Samllwidget 最好去代码复制 免得出错
点击提升
这样就能显示在主窗口里了 可能讲的不够周到