qt中ui的 使用介绍

2023-10-26

1.什么是ui?
ui通常是用Qt 设计师设计出来的界面文件的后缀。
通常情况下ui是一个指向这个界面类的指针。
ui-> 一般就是用来访问这个界面类里面的控件。
例如你的ui文件里有一个叫okButton的QPushButton。
你就可以这样来访问这个按钮ui->okButton。

setupUi(this)是由.ui文件生成的类的构造函数,这个函数的作用是对界面进行初始化,

它按照我们在Qt设计器里设计的样子把窗体画出来,把我们在Qt设计器里面定义的信号和槽建立起来。

也可以说,setupUi 是我们画界面和写程序之间的桥梁。

 

2.用QtCreator选择GUI的应用会产生含有如下vsqt文件的工程

3.pro文件是供qmake使用的文件。

4.main.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;
}

介绍:

QApplication a(argc, argv)和a.exec()可以理解为载入了Qt的架构。

其中调用了个MainWindow并把它show了出来。

5.mainwindow.h

 代码:

#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

介绍:
开始的namespace Ui可能让人有点摸不着头脑,这是因为qt把ui相关的类单独独立了出来。

声明namespace Ui是因为要调用Ui中的MainWindow,此MainWindow非彼MainWindow,后面涉及的*ui指针会调用它!

关于Q_OBJECT,Qt中与signal和slot相关的类都要这么声明下。

*ui会生成个窗体。

 6.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;
}

介绍:

构造时在堆上new了个Ui域中的MainWindow,并调用setupUi,析构仅仅是将其delete!

正如前面所述Qt很好的把ui分离了出去,前面图中的那个.ui文件就是让QtDesigner使的布局用文件!

7.ui_mainwindow.h

/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.4.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QPushButton *pushButton;
    QLabel *label;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MainWindow)
    {
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName(QStringLiteral("MainWindow"));
        MainWindow->resize(400, 300);
        centralWidget = new QWidget(MainWindow);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        pushButton = new QPushButton(centralWidget);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(170, 180, 75, 23));
        label = new QLabel(centralWidget);
        label->setObjectName(QStringLiteral("label"));
        label->setGeometry(QRect(50, 70, 261, 16));
        MainWindow->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainWindow);
        menuBar->setObjectName(QStringLiteral("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 400, 23));
        MainWindow->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainWindow);
        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
        MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MainWindow);
        statusBar->setObjectName(QStringLiteral("statusBar"));
        MainWindow->setStatusBar(statusBar);

        retranslateUi(MainWindow);

        QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
        pushButton->setText(QApplication::translate("MainWindow", "ok ", 0));
        label->setText(QApplication::translate("MainWindow", "this is a qt and vs projec to create exe.", 0));
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

介绍:
Ui_MainWindow声明了几个构件,它实现了setupUi函式,也就是前面那个MainWindow中调用的setupUi。

但是要说明的是QMetaObject::connectSlotsByName函式会自动连接相应名称的信号与槽,但要注意它连接的是传入的MainWindow及其子构件【不是子类】,注意前边ui->setupUi(this)中传入的this,也就是非ui域中的MainWindow,所以如果要声明signal和slot时还是要在非ui域的MainWindow中来声明,然后通过ui->xxx的形式来与GUI产生交互!

retranslateUi则会为ui中的构件命名。
前面非Ui域中的MainWindow的*ui指向的是Ui域中的MainWindow,而Ui域中的MainWindow继承Ui_MainWindow。

 

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

qt中ui的 使用介绍 的相关文章

  • 如何在 Qt 5 中写入和读取 QResource 文件?

    很奇怪 我通过以下方式将所需的文件添加到资源中添加现有文件 文件就在那里 我运行 qmake 构建 gt 运行 qmake 以使文件可用 第一期 我无法从输出终端向文件写入任何内容 但是当我手动写入文件时 每次运行它时输出终端都会显示更改
  • QT 5.6 QWebEngine不保存cookie

    我正在创建名为 webengine 的简单 QT 应用程序 pWebView new QWebEngineView this pWebView gt load QUrl http technoz ru pWebView gt show On
  • Qt 捕获按下的键

    我想到写原始蛇 我有一个窗口 程序可以在其中绘制随机线条 但我想不出如何捕捉按下的键来改变画线的方向 class QUpdatingPathIte public QGraphicsPathItem void advance int phas
  • 使用Qt设置http get请求参数

    我正在 Qt 中开发一个基本应用程序 它使用 REST API 从 Parse com 检索数据 我浏览了一些类参考和 cURL 手册 但仍然不清楚如何设置请求参数 例如 我想对用户进行身份验证 这是 Parse 提供的curl 示例 cu
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • 如何在Qt WebKit中将网页保存为“另存为完整网页”

    我需要使用 Qt WebKit 保存网页 类似于 另存为完整网页 以下是我的要求 保存索引html文件 维护实体编码 需要下载所有链接的图像和其他资源 需要将html页面中的资源路径更改为本地下载路径 需要维护网页当前状态 我可以使用 Qt
  • QML 适合所有分辨率的屏幕

    大家好 我的 QML 代码有问题 我犯了一个错误 我给元素设置了一定的大小 现在我在将应用程序放在其他设备上时遇到了问题 我会将我的代码粘贴到有宽度和高度的位置 以便您可以更改它以向我展示如何使用动态调整大小 我需要说我正在使用以下代码从
  • 如何使小部件溢出以使滚动条出现在 Qt 中?

    我的小部件的结构是 QWidget 定制为带有圆角边框的面板 要在边界内包含一个带有滚动条并带有边距的区域 然后我将其放入其中 QScrollArea 与 QVBoxLayout 垂直添加内容 然后我在其中添加一系列 标题间距为 0 的 Q
  • Qt进度条不是递增的,而是跳跃的

    我遇到 Qt GUI 进度条问题 问题是 对于较大的文件 350MB 及以上 进度条在开始时按预期工作 然后它似乎有一段时间没有移动 然后在工作完成时突然跳到 100 我不确定为什么会发生这种情况 我想知道是否有一些 Qt 之谜导致了这种情
  • 使用 Qt 在 xoverlay 之上绘制

    我希望在使用 Xoverlay 渲染的视频流之上绘制一些 UI 我正在使用 gstreamer 播放视频并使用 xoverlay 在 xvimagesink 上渲染它 我的小部件继承自 QGLWidget 我希望使用 QPainter 绘制
  • Qml 中的 FileDialog 在发布中不起作用

    我正在与以下项目合作Qt Quick Control 2 当我尝试在调试模式下运行软件时 FileDialog qml 可以完美打开 但是当我将其部署为发布模式时 它无法工作 这是我的代码 import QtQuick 2 4 import
  • QDomDocument 无法设置带有 标记的 HTML 文档的内容

    当我使用QDomDocument对于 HTML 内容 如果存在则无法设置内容在文档的开头 但实际上为什么 例如 考虑以下代码片段 QDomDocument doc QString content a href bar foo a qDebu
  • 使用 Poppler Qt4 C++

    我需要在我的应用程序中使用 pdf 查看器库 我使用 C 和 QT 我下载了Poppler http poppler freedesktop org 和代码示例Poppler Qt4 界面库 http people freedesktop
  • QMainWindow::showMaximized() 不更新大小

    我正在尝试创建一个QMainWindow封装一个QGraphicsView我把它放进去 我希望它一开始就最大化 所以我这样做 QMainWindow mainWindow new QMainWindow mainWindow gt setW
  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • QT“找不到 Qt 平台插件“xcb””

    我出于学术原因安装了QT everywhere 5 15开源版 但无法运行程序 首先 我编译了必要的源文件make并安装了QT Creator 然后我选择qmake来运行其中的程序 当我尝试运行示例程序时 遇到以下错误 qt qpa plu
  • 什么时候应该首选 Loader 而不是 createQmlObject,反之亦然 - QML?

    两者都可以动态创建对象 什么时候应该Loader优先于Qt createQmlObjectQML 中反之亦然吗 The Loader可以被视为特定对象的占位符 它还使您能够通过Loader s id Qt createQmlObject通常
  • 异步设计中如何知道哪个QNetworkReply属于QNetworkRequest?

    我可以轻松地用 C 进行异步设计 HttpResponseMessage response await httpClient GetAsync InputAddress Text run when request finished And
  • 我的 QSqlQueryModel 不在列表视图中显示数据

    我正在玩 QSqlQueryModel 但我现在完全陷入困境 我一整天都在寻找解决方案 但到目前为止还没有运气 我所做的工作是它从我的 sqlite 数据库中提取数据 但由于某种原因我无法在列表视图中显示它 我的角色名似乎不存在 对于我从数

随机推荐

  • MD5签名 Java转换C#

    Java 代码 import java security MessageDigest import org apache commons codec binary Base64 public static String doSign Str
  • STM32系统嘀嗒定时器实现1ms中断事件

    int main 系统定时器实现周期性1000hz中断事件 即1ms SysTick Config SystemCoreClock 1000 void SysTick Handler void static uint32 t cnt
  • 算法之递归算法(五)

    上一篇将讲解的内容是从整体流程思考递归函数的内容 这一篇我们衔接上一篇继续讲解从整体流程思考递归函数的内容 我们同样使用一个实例来分析 题目描述 任何一个正整数都可以用2的幂次方表示 例如 137 27 23 20 同时约定方次用括号来表示
  • 简述JVM垃圾回收机制

    1 Java中的四种引用类型 在Java中 对于引用最基本的解释就是 如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址 就称这块内存代表着一个引用 有点指针的意味 后来Java还将引用划分为了4种 根据被GC回收的
  • qt平台插件无法初始化

    报错问题 解决 Qt5 报错 This application failed to start because it could not find or load the Qt platform plugin 解决方法 利用qt自带的打包工
  • 最隐晦的程序设计指引

    一 百家争鸣 俗话说 程序员半年不学新东西 就变奥特曼 out man 过时之人 了 IT行业可以说是变化最快的行业 每年都有大量的新概念 新术语 新技术被创造出来 在多数人还在一头雾水时 更好的 替代品又被创造出来 别的不说了 单说设计方
  • git add时出现fatal: pathspec 'XXX.java' did not match any files

    后来发现是文件名出现错误 在建文件时多打了一个空格 导致不匹配 所以大家出现这个问题时很有可能时文件名写错 或者文件后缀写错或者没写
  • js实现文本分段

    本菜鸟的第一篇博文 最近在学习js 可能有很多不严谨或者不正确的地方 欢迎指正 在 net开发中 有时候会从后台数据库拉来一大串文本 放到页面上显示 那么问题来了 大段的文本中需要分段 一般分段在后台都用转义字符 n来表示 但是我们现在要把
  • 基于Unity ARFoundation的传送门项目 - Augmented Reality Portal based on ARFoundation in Unity

    窗 Window 1 Unity组件 Components 2 着色器 Shaders 1 DepthMask shader 门 Door 1 组件 Components 1 AR Camera 2 InnerWorld 3 Door 4
  • 华为OD机试 - 最大化控制资源成本(Java)

    题目描述 公司创新实验室正在研究如何最小化资源成本 最大化资源利用率 请你设计算法帮他们解决一个任务混部问题 有taskNum项任务 每个任务有开始时间 startTime 结束时间 endTime 并行度 parallelism 三个属性
  • 线程池

    1 线程池的概念 线程池 其实就是一个容纳多个线程的容器 其中的线程可以反复使用 省去了频繁创建线程对象的操作 无需反复创建线程而消耗过多资源 最初是程序员自己开发线程池 用ArrayList
  • fatal: unable to access ‘https://github.com/.../‘: Failed to connect to github.com port 443: 连接超时

    虚拟机终端fatal unable to access https github com Failed to connect to github com port 443 连接超时 浏览器输入ipaddress com 查询如下两个域名 并
  • 用k8s部署nginx

    1 4 用kubernetes部署 容器化应用 1 4 1 kubectl的常见命令 查看所有命令 kubectl help 查看控制器 kubectl get deployment 查看pod kubectl get pod 查看服务 k
  • 2023年第14届蓝桥杯题解

    这里写目录标题 日期统计 01 串的熵 冶炼金属 飞机降落 接龙数列 子串简写 日期统计 小蓝现在有一个长度为 100 的数组 数组中的每个元素的值都在 0 到 9 的范围之内 数组中的元素从左至右如下所示 5 6 8 6 9 1 6 1
  • es报错:Exception in thread “main“ SettingsException[Failed to load settings from [elasticsearch.yml]]

    配置参数空格问题 Failed to load settings from 小小的 我 2017 10 12 17 41 00 3068 收藏 版权 Exception in thread main SettingsException Fa
  • centos7.4 docker容器连不上宿主机mysql

    docker容器连不上宿主机mysql 文章目录 docker容器连不上宿主机mysql 一 docker和宿主机网络 1 在docker容器里localhost并不是指宿主机的localhost 2 在docker运行时就和宿主机建立了虚
  • 信息存储服务器机房有辐射吗,服务器机房有辐射大吗

    弹性云服务器 ECS 弹性云服务器 Elastic Cloud Server 是一种可随时自助获取 可弹性伸缩的云服务器 帮助用户打造可靠 安全 灵活 高效的应用环境 确保服务持久稳定运行 提升运维效率 三年低至5折 多种配置可选了解详情
  • arm嵌入式led灯闪烁实验报告_led闪烁实验报告.doc

    led闪烁实验报告 篇一 单片机实验 LED灯闪烁实验 实 验 报 告 课程名称 实验项目 2016年 3 月 13 日 实验目的 1 掌握51单片机开发板的使用步骤 2 掌握51单片机开发板所需软件的安装过程 3 以LED灯闪烁为例子 掌
  • express:webpack dev-server中如何将对后端的http请求转到https的后端服务器中?

    在上一篇文章 Webpack系列 在Webpack Vue开发中如何调用tomcat的后端服务器的接口 我们介绍了如何将对于webpack dev server的数据请求转发到后端服务器上 这在大部分情况下就够用了 然后现在问题又来了 在生
  • qt中ui的 使用介绍

    1 什么是ui ui通常是用Qt 设计师设计出来的界面文件的后缀 通常情况下ui是一个指向这个界面类的指针 ui gt 一般就是用来访问这个界面类里面的控件 例如你的ui文件里有一个叫okButton的QPushButton 你就可以这样来