QT界面操作之窗体操作

在界面操作中打开窗体关闭窗体,以及在窗体与窗体之间传递数据,这些是我们常常遇到的问题。这了我们首先来熟悉窗体的打开。
一、自己新建一个窗体
比如,我们在建立工程的时候选择了Qt Designer Form那么,系统则会自动为我们生成一个mainwindow.ui,那么我们不可能只有这么一个窗体来回折腾,我们需要新建一个自己的窗体
QT界面操作之窗体操作
这个时候我们可以通过项目编辑栏中的form右键,来选择add new来添加一个新form
QT界面操作之窗体操作
我们默认添加一个无按钮的对话框
QT界面操作之窗体操作
这样就直接生成了对应的UI和cpp,如果你不小心选择了下面的纯UI了
QT界面操作之窗体操作
这个时候,我们的对话框窗体是没有办法使用的,这里仅仅完成了UI,没有对应的程序代码文件cpp
QT界面操作之窗体操作
这时,我们要为它手动添加代码C++文件,这里我们选择C++ Class,它包含了头文件.h和代码文件.cpp,并选择Widget为基类:
QT界面操作之窗体操作
不过,生成的文件可能不能直接给dialog用,我们还必须修改一下,原始的是这样:

#include "about.h"

about::about(QWidget *parent) : QWidget(parent)
{

}

我们修改后为:

#include "about.h"
#include "ui_about.h"

about::about(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::about)
    {
        ui->setupUi(this);
    }
//增加一个自动销毁的函数
about::~about()
{
    delete ui;
}

虽然可以通过改进得到,但还是不建议这么做。太麻烦了。

二、选择并打开自己定义启动窗体
按照我们默认的习惯,我们也许会在这个主窗体(MainWindow.ui)上创建菜单,主要数据展示区等,反正一切主要的设计都在这个窗体中展开了,但事后我们会想,是不是应该在这个主窗体之前先显示一个加载或者登录的窗体呢(比如像微信或者QQ,或者某些收费软件那样)

这个时候我们就要来看看main.cpp,

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

从代码中我们很清晰的发现,其实只要在这里将我们自己的启动窗体的头文件包含进来,并将MainWindow对象替换成我们需要的启动窗体即可,如(添加一个StartFrom.ui),并将上方的代码但凡有MainWindow的地方修改为你要启动的类:

#include"startform.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    StartForm w;
    w.show();

    return a.exec();
}

QT界面操作之窗体操作
这个窗体显示完毕再进入主窗体。

二、利用按钮打开新窗体
在按钮下,通过go slot建立对应的事件,调用即可

void StartForm::on_pushButton_clicked()
{
    this->hide(); //隐藏登录界面
    testDialog *sf=new testDialog();
    sf->exec();
}

三、窗体之间的数据传递
窗体之间传递数据,有两种,一种是通过main.cpp在其中设置全局变量。还有一种,在窗体构造函数中增加传递参数,我们必须在头文件声明和cpp中都声明,如:
头文件h

#ifndef TESTDIALOG_H
#define TESTDIALOG_H

#include <QDialog>



namespace Ui {
class testDialog;
}

class testDialog : public QDialog
{
    Q_OBJECT

public:
    explicit testDialog(QWidget *parent = 0,QString tname,int tflag);

cpp文件

testDialog::testDialog(QWidget *parent,QString tname,int tflag) :
    QDialog(parent),
    ui(new Ui::testDialog)
{  
    this->windowTitle()=tname;
    ui->setupUi(this);
}

最后,我们在事件中的代码:

void StartForm::on_pushButton_clicked()
{
    this->hide();
   testDialog *sf=new testDialog(this,QString("传递窗体数值"),9);
    sf->exec();
}

在testDialog中,就可以获取到传递过来的值了。
QT界面操作之窗体操作

上一篇:路由的传参-query和params


下一篇:Vue 路由 04