Qt5 обучения - Нажмите кнопку, чтобы достигнуть того же открыть и закрыть дочернее окно

Требования: После нажатия на кнопку главное окно [Open] , чтобы открыть окно ребенка, и текст на кнопке меняется на [Close] Нажмите , чтобы закрыть окно ребенка снова!
Анализ: На самом деле, к югу всплывающее окно не трудно достичь, ключ для достижения той же кнопки для открытия и закрытия функции, необходимо обратить внимание на способы достижения, а также некоторые детали нужно использовать лямбда - выражения, выполните следующие действия:
1, сначала создайте новый проект , создать пустое окно файла, как показано на рисунке 1, а затем щелкните правой кнопкой мыши на проекте, выберите Добавить новый файл, выберите тип C ++ Class и выберите QWidget основе, создать файл с именем childWin дочернего окна, как показано на рисунке 2.
Here Вставка рисунка Описание
Here Вставка рисунка Описание
2, код widget.h файла , чтобы добавить следующее, в котором создаются выбранный общественный класс в главном окне и дочернее окно объекты кнопки глобально , чтобы иметь возможность использовать эти объекты могут быть использованы в функции слота.

#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, код widget.cpp файл ниже, добавить свои собственные в основном есть комментарий, я выберу несколько кодов ключевой говорить. Во-первых, кнопка инициализации и объект Субокно, кнопка исходный текст при условии [пуск], функцию определения в функции слот, текст кнопки приобретение [Open], затем нажмите поп подокно [Закрыть], а затем нажмите кнопку, чтобы закрыть окно; и, наконец, соединить сигналы и слоты, и для достижения нажмите [пуск] текст в Close на данный момент я использую лямбда-выражения, вы можете определить эти функции непосредственно подключения, где this-> showChildWin (); это вызов функции слота, нажмите кнопку запуска сигнала будет вызывать функцию, а затем использовать btn-> SetText ( «закрыто»); текст кнопки изменится, поэтому нажмите снова закрывает окно ребенка! Операционные результаты, как показано ниже:

#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;
}

Here Вставка рисунка Описание
Here Вставка рисунка Описание
4. Примечание: использование лямбда-выражения () ВПодключение, потому что вы не можете btn-> SetText ( «закрыто»); выражение в функцию слот в WIN-> шоу (), а позже, потому что система основана на последовательная программа для чтения, вы сразу установить на [Close] будет выполняться сразу WIN-> Close ();, в результате нажатия кнопки, чтобы открыть дочернее окно автоматически закроется, а не нажав на кнопку еще раз, чтобы закрыть! Этот пункт записки! Существует не в функции слота для инициализации подокна, или нажать на кнопке снова создает новое дочернее окно всплывает, вместо того, чтобы закрыть окно болтовни ребенка раньше!

Опубликовано 17 оригинальных статей · вона похвала 3 · Просмотров 1799

рекомендация

отblog.csdn.net/weixin_43350361/article/details/105146300