aprendizaje QT5 - Haga clic en un botón para lograr el mismo abrir y cerrar una ventana secundaria

Requisitos: Después de hacer clic en el botón ventana principal [Abrir] para que aparezca una ventana secundaria, y el texto en el botón cambia a [Cerrar] para cerrar la ventana secundaria de nuevo!
Análisis: De hecho, la sub-ventana emergente no es difícil de lograr, la clave está en lograr el mismo botón para la función de apertura y cierre, la necesidad de prestar atención a la manera de lograr, así como algunos detalles necesite expresiones uso lambda, siga estos pasos:
1, en primer lugar crear un nuevo proyecto , crear una ventana de archivo vacío, que se muestra en la Figura 1, y luego haga clic derecho en el proyecto, seleccione Agregar un nuevo archivo, seleccione el tipo de clase C ++ y seleccione basados en QWidget, crear un archivo llamado ventana secundaria childWin, como se muestra en la Figura 2.
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
2, el código widget.h archivo para agregar la siguiente, en la que se crea la clase pública seleccionada en la ventana principal y la ventana secundaria objetos de botón son globalmente para poder utilizar, estos objetos se pueden utilizar en la función de la ranura.

#include <QWidget>
#include "childwin.h"
#include <QPushButton>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    //创建按钮对象和子窗口对象
    QPushButton *btn;
    childWin *win;
    //弹出/关闭子窗口的槽函数
    void showChildWin();
    
private:
    Ui::Widget *ui;
};

3, archivo widget.cpp código de abajo, añadir su propio básicamente tiene un comentario, voy a recoger unos pocos hablan código de la llave. En primer lugar, el botón de inicialización y el objeto sub-ventana, el botón de texto inicial proporcionada [Inicio]; definición de función en la función de la ranura, el texto del botón de adquisición es [Abrir] a continuación, en sub-ventana emergente [Cerrar] continuación, haga clic para cerrar la ventana; por último, las señales de conexión y ranuras, y para alcanzar tecleo botón [inicio] texto en Cerrar en este momento estoy usando expresiones lambda, se puede definir estas funciones directamente de conexión, donde this-> showChildWin (); es ranura llamada a la función, haga clic en el botón de señal de inicio llamará a la función, a continuación, utilizar btn-> setText ( "cerrado"); el texto del botón cambiará, así que haga clic de nuevo se cierra la ventana secundaria! Resultados de operación como se muestra a continuación:

#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
#pragma execution_character_set("utf-8"); //如果中文出现乱码加上这行!!!

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //定义主窗口大小
    resize(380,300);
    setWindowTitle("主窗口");
    //创建一个子窗口对象
    this->win = new childWin;
    win->resize(350,200);
    win->setWindowTitle("子窗口");
    //创建一个按钮对象
    this->btn = new QPushButton("打开",this);
    btn->move(100,80);
    //连接信号和槽,利用lambda表达式改变按钮上的文字
    connect(btn,&QPushButton::clicked,this,[=](){
        this->showChildWin();
        btn->setText("关闭");
    });
    //connect(btn,&QPushButton::clicked,this,&Widget::showChildWin);
}
//定义弹出子窗口的槽函数
void Widget::showChildWin()
{
    if(btn->text()=="打开")
        win->show();
    if(btn->text()=="关闭")
        win->close();
}

Widget::~Widget()
{
    delete ui;
}

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
4. Nota: Las expresiones lambda (uso) de la conexión porque no se puede btn-> setText ( "cerrado"); frase en la función de la ranura en-ganar> show (); después, debido a que el sistema se basa en programa de lectura secuencial, se puso inmediatamente a [Cerrar] se ejecutará inmediatamente-ganar> close ();, el resultado es de clic de botón para abrir la ventana secundaria se cerrará automáticamente, en lugar de hacer clic en el botón para cerrar! Este punto a la nota! No hay en la función de la ranura para inicializar la sub-ventana, o haga clic en el botón de nuevo se creará una nueva ventana secundaria aparece, en lugar de cerrar la charla ventana secundaria antes!

Publicado 17 artículos originales · ganado elogios 3 · Vistas 1799

Supongo que te gusta

Origin blog.csdn.net/weixin_43350361/article/details/105146300
Recomendado
Clasificación