Qt5-Qt Creator进行多窗口编程


版本

版本 作者 时间 备注
0.1 loon 2018.10.23 初稿

目录

文章目录

一、前言

最近要利用Qt进行上位机配置软件的开发,但是发现自己虽然做了一些基于Qt的PC软件开发,但是一直没有系统性的总结和学习过Qt,这样下去,积累的经验和知识随着时间推移又会丢失,所以趁着这段时间边学边总结一下。

以下总结基于Qt5.6.0,采用Qt creator进行开发。

二、Qt多窗口编程

1、示例思路

New Project(新工程)–>选择application(应用程序)–>选择默认的Qt widgets application(窗口小部件应用程序)–>选择工程路径和工程名–>基类选择QWidget即可,暂时不使用版本管理工具,然后直接完成即可。

然后鼠标右击工程文件夹,选择添加新文件,然后选择Qt–>Qt设计师界面类–>Dialog without Buttons(不要按钮的会话框)–>类名设置为myDlg,然后下一步病点击完成即可调到mydlg.ui界面中。
在这里插入图片描述

鼠标拖入一个Push Button,然后双击修改其文本为“进入主窗口”,在右侧修改其objectName为enterBtn。

然后在下面的signal & Slots Editor中“+”一个信号和槽,并将其关联,关联我们刚刚创建的enterBtn的clicked信号给myDlg,这样当我们点击该button时将信号发送给mydlg,然后mydlg退出进入主窗口。
在这里插入图片描述

主窗口也拖入一个push button,键入文本“弹出一个对话框”,然后右键push button选择转到槽,在该槽函数中显示一个新创建的dlg,该dlg和之前的dlg一样,也有一个“进入主窗口”的button,这样点击后本次dlg退出,然后显示主窗口,主窗口点击“弹出一个对话框”,如此周而复始。。。
在这里插入图片描述

2、示例预期结果

!](https://img-blog.csdn.net/20181023221307818?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTUxMDgxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

3、示例代码

mydlg.h:

#ifndef MYDLG_H
#define MYDLG_H

#include <QDialog>

namespace Ui {
class myDlg;
}

class myDlg : public QDialog
{
    Q_OBJECT

public:
    explicit myDlg(QWidget *parent = 0);
    ~myDlg();

private:
    Ui::myDlg *ui;
};

#endif // MYDLG_H

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "mydlg.h"

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    myDlg myD2;
};

#endif // WIDGET_H

main.cpp:

#include "widget.h"
#include <QApplication>
#include "mydlg.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    myDlg myD;

    if(myD.exec() == QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else
        return 0;
}

widget.cpp:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::on_pushButton_clicked()
{
    myD2.show();
}

4、最后

main.cpp中创建的dlg是激活进入主窗口的,后续的dlg则是由由于点击了主窗口中的push button而创建的,每次进入主窗口后dialog都会退出,这个循环的过程务必想清楚。