Qt如何调用建立好的ui界面

2023-11-07

       在我们刚才学习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_H
BMS1.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界面






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt如何调用建立好的ui界面 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 按成员序列化

    我已经实现了template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • mongodb常用操作

    只显示某一字段 db extra third 2 2 find name 1 删除字段 db extra third 2 2 remove name null 导出某一个collection usr local app mongodb bi
  • linux永久自动挂载

    给sdb先分两个区 fdisk dev sdb vi etc fstab 永久挂载文件 第1列 挂载设备 想挂谁就写谁 第2列 挂载点 boot 想要永久挂载到根下d1或d2 在这里就写根下d1或d2 第3列 文件系统类型 xfs 格式化成
  • Vue3实现将页面转成PDF并下载或直接打印

    步骤一 安装依赖包 npm i html2canvas npm i jspdf 步骤二 在utils文件夹下新建htmlToPdf js文件 页面导出为pdf格式 import html2Canvas from html2canvas im
  • HASH函数的特点及其应用

    HASH函数必须具备两个基本特征 单向性 和 碰撞约束 单向性是指其的操作方向的不可逆性 在HASH函数中是指 只能从输入推导出输出 而不能从输出计算出输入 碰撞约束是指 不能找到一个输入使其输出结果等于一个已知的输出结果 或者 不能同时找
  • nmap常用指令

    一 Nmap扫描端口常用指令 1 虚拟机的扫描 arp scan l 2 TCP Connect 扫描 通过试图与主机相应的TCP端口建立一个完整的TCP连接 从而判断主机端口的开放信息 nmap sT 域名 IP地址 结果 列出开放的端口
  • 如何在Linux环境下跑Wacom的板子

    文章目录 简介 也许你什么都不需要做 安装Wacom驱动 配置Wacom设备 简介 首先 在Linux环境下使用数位板或者数位屏也算是比较小众的一种需求了 但放在大环境下 各大电影公司例如皮克斯 梦工厂都有极其强大的后期制作能力 甚至强大到
  • java在源目录下根据文件名找到文件并返回绝对路径(递归)

    import java io File public class RecursionDemo2 public static void main String args searchFiles new File D YoudaoDict ex
  • hive -e 和hive -f 的注意点 (//和////)

    原谅我张嘴可能就想骂人 当然跟别人无关 想骂的是自己太年轻 也顺便记录下这个注意点 菜鸟一只 多多见谅 大家都知道 hive f 后面指定的是一个文件 然后文件里面直接写sql 就可以运行hive的sql hive e 后面是直接用双引号拼
  • 如何运用MATLAB实现K-MEANS聚类分析

    由于自己最近在学习聚类分析 也算是一个入门 相当于将自己这段时间的学习成果进行一个总结 分享给更多打算学习聚类分析或者需要用到聚类分析的同学们 在了解K MEANS聚类分析之前 我们首先明确聚类的含义 聚类是将数据分类到不同的类或者簇这样的
  • Springboot 后端配置流程

    概述 分三步 一 从github克隆项目master分支来 git操作步骤 目录 1 配置用户名和邮箱 2 初始化 3 设置仓库地址 4 拉取代码 5 设置保存账号密码时间 6 查看状态 sudo git config global use
  • python中find函数的使用方法_Python re 模块findall() 函数返回值展现方式解析

    findall 函数 在字符串中找到正则表达式所匹配的所有子串 并返回一个列表 如果没有找到匹配的 则返回空列表 注意 match 和 search 是匹配一次 findall 匹配所有 match 和 search 的区别也很大 可以自行
  • 自媒体必备的4个文案网站,每一个都很实用,赶紧收藏

    1 文案狗 在这里 谐音梗 不用担心扣钱 很多广告词 slogan都离不开它 如果实在想不到合适的词 可以在这里搜索 有了这么多的词汇灵感 再也不担心写不出吸睛的广告文案了 是广告人非常喜欢的文案网站 只要输入关键字或者词语 就能生成各种谐
  • 职责链模式

    职责链模式 职责链模式概述 职责链模式解决的问题 角色分析 职责链模式优点 代码示例 源码中的职责链模式使用案例 业务与设计模式落地案例 职责链模式概述 职责链模式解决的问题 案例 一个贷款审批案例 假设贷款额度小于5万时由客户负责人审核放
  • 用python做DEVS离散事件建模与仿真

    1 DEVS 离散事件运行规范 离散事件系统规范 DEVS discrete event system specification 是由美国学者 B P Zeigler等提出的一种模块化建模方法 它将描述对象中的每个子系统看作一个具有内部独
  • 利用Blob下载文件

    前端涉及到导出文件时可以使用Blob进行下载 这里是用的vue this store dispatch exportList then response gt var blob new Blob response type applicat
  • LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO SAM发表于IROS2020 是一个效果非常好的惯性 激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计 于是打算把LIO SAM改一改搞过来 修改过程中发现一个问题 在里程计求解 mapOptimization的LMOptim
  • 多线程面试60问

    1 多线程有什么用 1 发挥多核CPU 的优势 随着工业的进步 现在的笔记本 台式机乃至商用的应用服务器至少也都是双核的 4 核 8 核甚至 16 核的也都不少见 如果是单线程的程序 那么在双核 CPU 上就浪费了 50 在 4 核 CPU
  • python练习作业

    1 设计一个程序 完成 英雄 商品的购买 展示商品信息 折扣 gt 输入商品价格 gt 输入购买数量 gt 提示付款 输入付款金额 gt 打印购买小票 扩展 print n t t英雄商城购买英雄 print 英雄信息 print 14 p
  • vue3 打包上线配置

    1 项目根目录下 src同目录 新建vue config js文件 2 输入配置参数 const path require path module exports 基本路径 整个文件夹在哪 publicPath 输出文件目录 文件夹名 ou
  • Qt如何调用建立好的ui界面

    在我们刚才学习qt的时候 很多的时候 按照新建立的工程文件 出现一个困扰 就是如何调用额外建立的UI界面 在这里主要是说明这里的面的关键因素 其实学习qt 如果之前有过学过C 的同事 那么就学习qt就会很容易上手 因为qt主要的核心就是以c