Da instalação à implementação, use QT para concluir o processamento simples de imagens sem base

Índice

         1. Download e instalação do QT

Endereço oficial para download do site

Instalar QT

Ambiente de configuração

 2. Crie um novo projeto

3. Dimensionamento de imagem


1. Download e instalação do QT

        Antes de baixar o QT, devemos primeiro saber o que é o QT e o que o QT pode fazer?

        Qt é uma biblioteca de desenvolvimento C++ multiplataforma, usada principalmente para desenvolver a interface gráfica do usuário Qt. Embora seja frequentemente considerada uma biblioteca GUI para o desenvolvimento de aplicações de interface gráfica, isso não é tudo do Qt; além de desenhar interfaces bonitas (incluindo controles, layout e interação), o Qt também inclui muitas outras funções, como multi-threading , Acessar bancos de dados, processamento de imagens, processamento de áudio e vídeo, comunicações de rede, operações de arquivos, etc.

        Em seguida, vamos começar a baixar o QT

        1. Clique no arquivo exe e selecione próximo

       2. Faça login em sua conta Qt. Se você não possui uma conta, registre-se primeiro nesta página. Deve-se observar que a senha da conta deve ter pelo menos 7 caracteres e deve incluir três dos quatro tipos a seguir: letras minúsculas, letras maiúsculas, números, símbolos (* *!"#/() =?@${[]}\,.-_|;:'*^~+**)

         Após o cadastro do novo usuário, clique no link de ativação recebido no e-mail para ativar. Após a ativação, retorne à página de instalação para fazer login.

3. Marque a caixa vermelha na imagem abaixo e clique em próximo

 4. Clique em próximo

5. Selecione o caminho de instalação apropriado (nota: espaços e caracteres chineses não podem aparecer e não é recomendado instalar na unidade C)

         6. Selecione os componentes. MSVC precisa corresponder à versão correspondente do Visual Studio antes de poder ser usado.Qt5.14.2 suporta apenas VS2015 e VS2017.

         Aqui selecionei apenas "MSVC 2017 64 bits" e "MinGW 7.3.0 64 bits" (você pode escolher conforme necessário se tiver outras necessidades)

7. Clique em Avançar e aguarde a instalação

Instalação bem sucedida!

  • Ambiente de configuração

1. Encontre o caminho de instalação do QT e o caminho da ferramenta e copie-os  

        2. Clique com o botão direito neste computador->Propriedades->Design de sistema avançado->Variáveis ​​de ambiente->Clique duas vezes em Caminho->Adicione o caminho de instalação do Qt e o caminho da ferramenta às variáveis ​​de ambiente.

Neste ponto, as variáveis ​​de ambiente foram configuradas com sucesso!

 2. Crie um novo projeto

        Entrando na interface principal do QT, você pode ver que há uma interface de boas-vindas, uma interface de edição de arquivos, uma interface de edição de janela visual, uma interface de depuração, uma interface de configuração de propriedades do projeto e uma interface de ajuda à esquerda. Do seguinte modo:

        1. Mude para a interface de boas-vindas, clique para criar um novo projeto e selecione o primeiro "Aplicativo QT Widgets". Clique em escolher no canto inferior direito

(Widgets significa componentes, aplicativo de componente Widgets Application)

        2. Preencha o nome do seu projeto, tome cuidado para não deixar espaços e não ter um nome chinês no local do projeto, clique em Avançar

        3. O padrão do sistema de compilação é

4. Nomeie você mesmo a classe.

QT tem três classes básicas: QMainWindow, QWidget e QDialog.

QMainWindow: Uma janela do aplicativo que fornece uma barra de menu e uma barra de status

QWidget: classe base para todos os objetos da interface do usuário, janela em branco

QDialog: A classe base da caixa de diálogo, uma janela interativa usada principalmente para transmitir mensagens

Aqui podemos escolher QWidget.

5. Selecione o idioma

6. Selecione o ambiente de compilação

7. Clique em Concluir

8. Clique em Run. Se uma interface em branco aparecer, significa que o novo projeto foi bem-sucedido.

3. Dimensionamento de imagem

        O trabalho de preparação finalmente foi concluído, agora podemos começar oficialmente a escrever o código!

        Antes disso, vamos primeiro entender a estrutura de arquivos de um QT e mudar para a interface de edição

        Nosso código é escrito principalmente no arquivo fonte da classe de janela e no arquivo de cabeçalho da classe de janela.

        Antes de escrever código, vamos primeiro entender um conceito importante: sinais e slots (slots)

        Sinais e slots são usados ​​para comunicação entre dois objetos. Quando algo especial acontece, um sinal pode ser emitido. Por exemplo, quando um botão é clicado, o sinal clicked() é emitido; e o slot é uma função que é chamada para responder ao sinal após o sinal ser emitido. 

        Vamos entender melhor o mecanismo de sinal e slot no aplicativo.
        A seguir estão algumas explicações básicas de código de arquivos de cabeçalho de janela e arquivos de origem de janela:

#ifndef WIDGET_H       //防止重复定义
#define WIDGET_H

#include <QWidget>     //包含Qt的QWidget类的头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{    
        Q_OBJECT      //允许使用信号和槽机制
public:   
    Widget(QWidget *parent = nullptr);     //类的构造函数
    ~Widget();                             //析构函数

private: 
    Ui::Widget *ui;   //把Ui::Widget作为一个私有类,可以通过它来访问在Qt设计师中设计的窗口部件
};

#endif // WIDGET_H
 
 

Processamento de imagem

  • Dimensionamento de imagens
            Para realizar o processamento de imagens, devemos primeiro adicionar arquivos de cabeçalho para exibir imagens, processar imagens e criar botões.
    A seguir devemos explicar os ponteiros dos objetos Qlabel e QImage, que são usados ​​para exibir imagens e armazenar imagens respectivamente, e então declarar o botão de ampliar e o botão de reduzir.
            Por fim, defina um slot privado no qual seja declarada a função de resposta para conexão ao sinal.
    (Os slots são divididos em três categorias: slots públicos; slots de proteção; slots privados. Você mesmo pode entender as diferenças correspondentes)
    O código é o seguinte:
     
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>       //窗口组件
    #include <QLabel>        //显示图片
    #include <QImage>        //处理图像
    #include <QPushButton>   //创建按钮
    QT_BEGIN_NAMESPACE
    namespace Ui { class Widget; }
    QT_END_NAMESPACE
    
    class Widget : public QWidget
    { 
       Q_OBJECT
    public:    
            Widget(QWidget *parent = nullptr);   
            ~Widget();
    private:    
            Ui::Widget *ui;
    private:    
            QLabel *label;    
            QImage *img;    
            QPushButton *bigBt;     //放大按钮    
            QPushButton *smallBt;   //缩小按钮
    private slots:   //私有槽:只有类自己可以将信号与之相连接    
            void bShow();      //放大    
            void sShow();      //缩小
    };
    #endif // WIDGET_H
            No widget.cpp, no construtor devemos instanciar label, img e os botões de aumentar e diminuir o zoom. Ao mesmo tempo, defina as funções de resposta do botão de aumentar e diminuir o zoom fora do construtor. O código específico é o seguinte:
    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //实例 QLabel
        label = new QLabel(this);
        label->setGeometry(QRect(160,50,500,500));   //放置控件位置,x,y,宽,高
        //实例QImage
        img = new QImage;
        //QImage加载图片
        img->load("S:/VStudio/image/1.bmp");
        //label显示图片
        label->setPixmap(QPixmap::fromImage(*img));  //QPixmap类是一种图像表示形式,可以用作绘画设备
    
        //实例放大按钮
        bigBt = new QPushButton(this);
        bigBt->setGeometry(QRect(50,100,100,25));    //设置按钮位置和大小
        bigBt->setText("放大");
        connect(bigBt,SIGNAL(clicked()),this,SLOT(bShow()));   //使用connect()函数连接按钮的clicked()信号到窗口的bShow()槽函数
                                                               //表明用户在单机该按钮时,会触发bShow()槽函数执行操作
        //实例缩小按钮
        smallBt = new QPushButton(this);
        smallBt->setGeometry(QRect(50,150,100,25));
        smallBt->setText("缩小");
        connect(smallBt,SIGNAL(clicked()),this,SLOT(sShow()));
    }
    
    //放大操作
    void Widget::bShow()
    {
        *img = img->scaled(600,600,Qt::IgnoreAspectRatio);
        label->setPixmap(QPixmap::fromImage(*img));    //绘制图像
    }
    //缩小操作
    void Widget::sShow()
    {
        *img = img->scaled(100,100,Qt::IgnoreAspectRatio);
        label->setPixmap(QPixmap::fromImage(*img));    //绘制图像
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    

Efeito de realização:

 

 

 Resumo:
        O botão e a função de resposta precisam ser declarados em .h, e o botão e a função de resposta devem ser instanciados e definidos em .cpp.
        Seguindo essa ideia, podemos adicionar botões de movimento, botões de rotação vertical, botões de rotação horizontal, botões de rotação de ângulo, botões de ajuste de brilho, botões de escala de cinza, etc. Os métodos e ideias são
        consistentes com o botão de redução de imagem. Aqui eu forneço apenas o código-chave :

private:
    QLabel *label;
    QImage *img;

    QPushButton *bigBt;     //放大按钮
    QPushButton *smallBt;   //缩小按钮
    QPushButton *move;      //移动按钮

    QPushButton *Vflip;     //垂直翻转按钮
    QPushButton *Hflip;     //水平翻转按钮
    QPushButton *Dflip;     //角度翻转按钮
    QPushButton *bright;    //亮度调节按钮


private slots:         //私有槽:只有类自己可以将信号与之相连接
    void on_pushButton_clicked();
    void bShow();      //放大
    void sShow();      //缩小
    void moveImg();    //移动
    void hshow();      //水平翻转
    void vShow();      //垂直翻转
    void angleShow();  //角度操作
   
Widget::Widget(QWidget *parent)    //父窗口指针
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //实例 QLabel
    label = new QLabel(this);
    label->setGeometry(QRect(160,50,500,500));   //放置控件位置,x,y,宽,高
    //实例QImage
    img = new QImage;
    //QImage加载图片
    img->load("S:/VStudio/image/1.bmp");
    //label显示图片
    label->setPixmap(QPixmap::fromImage(*img));  //QPixmap类是一种图像表示形式,可以用作绘画设备

    //实例放大按钮
    bigBt = new QPushButton(this);
    bigBt->setGeometry(QRect(50,100,100,25));    //设置按钮位置和大小
    bigBt->setText("放大");
    connect(bigBt,SIGNAL(clicked()),this,SLOT(bShow()));   //使用connect()函数连接按钮的clicked()信号到窗口的bShow()槽函数
                                                           //表明用户在单机该按钮时,会触发bShow()槽函数执行操作
    //实例缩小按钮
    smallBt = new QPushButton(this);
    smallBt->setGeometry(QRect(50,150,100,25));
    smallBt->setText("缩小");
    connect(smallBt,SIGNAL(clicked()),this,SLOT(sShow()));

    //实例移动按钮
    move = new QPushButton(this);
    move->setGeometry(QRect(50,200,100,25));
    move->setText("移动");
    connect(move,SIGNAL(clicked()),this,SLOT(moveImg()));


    //实例垂直翻转按钮
    Vflip = new QPushButton(this);
    Vflip->setGeometry(QRect(50,250,100,25));
    Vflip->setText("垂直翻转");
    connect(Vflip,SIGNAL(clicked()),this,SLOT(vShow()));

    //实例水平翻转按钮
    Hflip = new QPushButton(this);
    Hflip->setGeometry(QRect(50,300,100,25));
    Hflip->setText("水平翻转");
    connect(Hflip,SIGNAL(clicked()),this,SLOT(hshow()));


    //实例角度翻转按钮
    Dflip = new QPushButton(this);
    Dflip->setGeometry(QRect(50,350,100,25));
    Dflip->setText("角度翻转");
    connect(Dflip,SIGNAL(clicked()),this,SLOT(angleShow()));

}

//放大操作
void Widget::bShow()
{
    *img = img->scaled(600,600,Qt::IgnoreAspectRatio);
    label->setPixmap(QPixmap::fromImage(*img));    //绘制图像
}
//缩小操作
void Widget::sShow()
{
    *img = img->scaled(100,100,Qt::IgnoreAspectRatio);
    label->setPixmap(QPixmap::fromImage(*img));    //绘制图像
}
//点击移动
int i=50;
void Widget::moveImg()
{
    //移动label控件
    label->move(i,50);    //修改控件位置
    i+=10;                //每次移动10像素
}
//垂直翻转
void Widget::vShow()
{
    *img = img->mirrored(false,true);               //水平翻转false,垂直翻转true
    label->setPixmap(QPixmap::fromImage(*img));
}
//水平翻转
void Widget::hshow()
{
    *img = img->mirrored(true,false);
    label->setPixmap(QPixmap::fromImage(*img));
}
//角度操作
void Widget::angleShow()
{
    QMatrix matrix;
    //88度
    matrix.rotate(88);
    *img = img->transformed(matrix);
    label->setPixmap(QPixmap::fromImage(*img));
}


Efeito de realização:

        Até agora, o processamento de imagem mais básico foi concluído. Mas ainda há muito espaço para melhorias. Por exemplo, ajustar a escala de cinza e o brilho da imagem, projetar a interface para torná-la melhor, melhorar o efeito de escala da imagem,
etc. 

Acho que você gosta

Origin blog.csdn.net/chenhuifei/article/details/131284472
Recomendado
Clasificación