在我们刚才学习qt的时候,很多的时候,按照新建立的工程文件,出现一个困扰。就是如何调用额外建立的UI界面。在这里主要是说明这里的面的关键因素。其实学习qt,如果之前有过学过C++的同事,那么就学习qt就会很容易上手。因为qt主要的核心就是以c++为主的。就好像我们现在讨论的如何添加ui界面到我们的主窗口中,或者调用ui界面弹出一个ui界面也是同样的道理。
1)现在我们开始建立一个widget类的主窗口界面,如下图所示:
mainwindow.h 头文件代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "bms1.h"
#include "bms2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp 文件代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
2)经过以上第一步的操作,我们已经建立了mainwindow主窗口界面,那么我们现在开始创建的我们另外的ui界面。
点击选中工程文件里面的“界面文件”,右键点击,选中“添加新文件”,如下图所示:
3)选中qt设计界面类,如下图所示;
4)选中widget类,如下图所示:
点击下一步,一直创建完毕。
5)最后创建完毕的界面,我们给它添加些其他的控件,如下图示,
同时将该ui界面的属性上的objectname修改名字为BMS1:
6)同理,按照如上的方法,我们再创建一个Ui界面。
修改objectname名字为BMS2,如下图所示:
7)这个时候,因为我们现在建立的这两个BMS1,BMS2这两个ui界面,没有自带上类的代码。如我们刚才刚刚建立的mainwindow主机是,系统就会自动生成两个文件mainwindow,h 及mainwindow.cpp。但是我们想调用以上建立BMS1,BMS2界面。所以,我们也应该给这两个ui界面,配置属于他们自己的头文件及执行文件。如下图所示,添加Qt设计师界面类。
8)我们分别建立两个类,名称分别为BMS1,BMS2.
BMS1.h 头文件代码,如下所示:
#ifndef BMS1_H
#define BMS1_H
#include <QWidget>
namespace Ui {
class BMS1;
}
class BMS1 : public QWidget
{
Q_OBJECT
public:
explicit BMS1(QWidget *parent = 0);
~BMS1();
private:
Ui::BMS1 *ui;
};
#endif // BMS1_HBMS1.cpp 头文件代码,如下所示:
#include "bms1.h"
#include "ui_bms1.h"
BMS1::BMS1(QWidget *parent) :
QWidget(parent),
ui(new Ui::BMS1)
{
ui->setupUi(this);
}
BMS1::~BMS1()
{
delete ui;
}
同样,针对第二个BMS2的ui界面,头文件及执行文件也是类同。这里就再描述。
在这里面,最关键的技术,就是我们再建立这两个ui的界面类的时候,一定要确保,这两个界面类的名字:BMS1,BMS2和我们刚才再建立两个ui界面的objectname的名字保存一致。这样,我们就可以把ui界面和ui界面类库绑定在一起了。
9)现在开始,回过头来,我们就可以在mainwindow主窗口头文件上面,分别添加两个包含文件,如下图所示:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "bms1.h"
#include "bms2.h"
再然后,用我们C++的派生类,来进行类派生,及建立按键信号槽。
BMS1 *pDisplaydow;BMS2 *PSetupwindow;
mainwindow.h头文件如下所示:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "bms1.h"
#include "bms2.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public:
BMS1 uiBms1;
BMS2 uiBms2;
BMS1 *pDisplaydow;
BMS2 *PSetupwindow;
public:
//BMS1 *show(){return pDisplaydow;}
//BMS2 *setupwindow(){return PSetupwindow;}
private slots:
void on_commandLinkButton_clicked();
void on_commandLinkButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp头文件如下所示:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//BMS1 *show(){return pDisplaydow;}
pDisplaydow = new BMS1(this);
pDisplaydow->setObjectName("显示界面");
pDisplaydow->setGeometry(200,50,704,600);
pDisplaydow->show();
PSetupwindow = new BMS2(this);
PSetupwindow->setObjectName("显示设置参数");
PSetupwindow->setGeometry(200,50,704,600);
PSetupwindow->hide();
//setFixedSize(800,600);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_commandLinkButton_clicked()
{
//uiBms1.show();
if(PSetupwindow->isVisible())
{
PSetupwindow->hide();
pDisplaydow->show();
}
}
void MainWindow::on_commandLinkButton_2_clicked()
{
//uiBms2.show();
if(pDisplaydow->isVisible())
{
pDisplaydow->hide();
PSetupwindow->show();
}
}
10)通过主窗口建立的信号槽分别为:
private slots:
void on_commandLinkButton_clicked();
void on_commandLinkButton_2_clicked();
11)重新链接编制,执行执行,点击按钮,显示串口界面1,界面2.
说明BMS1,BMS2两个ui界面已经成功被主窗口调用。
显示BMS1界面
显示BMS2界面