[编程语言][C++][Qt]单独添加UI文件

这篇具有很好参考价值的文章主要介绍了[编程语言][C++][Qt]单独添加UI文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

不知什么原因,Qt Creator并不是很完美很智能。当先写好界面类的头文件和源代码文件后,我们再添加用于可视化界面设计的UI文件时,会出现一些问题。

解决方案

1. 添加UI文件

qt单独编译ui文件,编程语言,ui,qt,c++
qt单独编译ui文件,编程语言,ui,qt,c++
qt单独编译ui文件,编程语言,ui,qt,c++
qt单独编译ui文件,编程语言,ui,qt,c++
qt单独编译ui文件,编程语言,ui,qt,c++
当使用CMake管理项目时,CMake会读取CMakeLists.txt文件来确定各种项目设置。需要把MainWindow.ui包含进项目时,在CMakeLists.txt中添加入上图的第21行时,才能真正实现。

2. 与对应的界面类进行关联

UI文件MainWindow.ui对应的类文件为MainWindow.hMainWindow.cpp文件。

// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE						//**********
namespace Ui { class MainWindow; }		//         *
QT_END_NAMESPACE						//**********

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~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)		//**********
{
}

MainWindow::~MainWindow()
{
}

用注释标注过的地方即为需要更改的地方。

虽然默认的UI文件是个空的界面,但道理,这个时候应该已经使用UI文件,并可以构建项目了。但若此时真的构建项目,那么会出现下面的编译时错误。qt单独编译ui文件,编程语言,ui,qt,c++
通过错误信息,我们不难看出是我们新包含的./ui_MainWindow.h头文件不合适。此头文件是由Qt Creator自动创建的,而且也没有自动包含进项目中。在笔者的磁盘上项目的路径是E:\Project\Qt\Demo018,而这个头文件的位置为E:\Project\Qt\build-Demo018-Desktop_Qt_6_4_0_MinGW_64_bit-Debug\Demo018_autogen\include\ui_MainWindow.h。如果我们打开这个头文件则如下所示:

/********************************************************************************
** Form generated from reading UI file 'MainWindow.ui'
**
** Created by: Qt User Interface Compiler version 6.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/QApplication>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Form
{
public:

    void setupUi(QWidget *Form)
    {
        if (Form->objectName().isEmpty())
            Form->setObjectName("Form");
        Form->resize(400, 300);

        retranslateUi(Form);

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

    void retranslateUi(QWidget *Form)
    {
        Form->setWindowTitle(QCoreApplication::translate("Form", "Form", nullptr));
    } // retranslateUi

};

namespace Ui {
    class Form: public Ui_Form {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

不难看出其中的问题:ui_MainWindow.h头文件中提到的都是Form,而不是我们在源代码文件MainWindow.cpp中提到的MainWindow。在看这个头文件的注释中的这一句Form generated from reading UI file 'MainWindow.ui',我们可以推断出错误的根源是在UI文件MainWindow.ui中。

我们以普通文本编辑器模式打开MainWidnow.ui文件,如下图所示:

<ui version="4.0" >
 <author></author>
 <comment></comment>
 <exportmacro></exportmacro>
 <class>Form</class>
 <widget class="QWidget" name="Form" >
  <property name="geometry" >
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle" >
   <string>Form</string>
  </property>
 </widget>
 <pixmapfunction></pixmapfunction>
 <connections/>
</ui>

在文件的第4行为<class>Form</class>,而在第5为<widget class="QWidget" name="Form" >这才是我们无法编译的真正原因!!!

3. 修改UI文件

MainWidnow.ui文件第4行中的Form改为我们使用的MainWindow。如下所示:

<ui version="4.0" >
 <author></author>
 <comment></comment>
 <exportmacro></exportmacro>
 <class>MainWindow</class>
 <widget class="QWidget" name="MainWindow" >
  <property name="geometry" >
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle" >
   <string>Form</string>
  </property>
 </widget>
 <pixmapfunction></pixmapfunction>
 <connections/>
</ui>

此时,就可以成功构建项目了。运行项目后,如下图所示:
qt单独编译ui文件,编程语言,ui,qt,c++
细心的同学可以发现,我们设置的窗口的标题是Form,而不是Demo018。而在MainWidnow.ui中我们确实看到了相关的代码:

  <property name="windowTitle" >
   <string>Form</string>
  </property>

以界面编辑器方式打开这个文件后,在属性栏中我们也找到了相关设置:
qt单独编译ui文件,编程语言,ui,qt,c++
这说明,界面类并没有从UI文件中读取界面设计。

4. 设置界面类读取UI文件

#include "MainWindow.h"
#include "./ui_MainWindow.h"

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

MainWindow::~MainWindow()
{
}

在类MainWindow的构造函数中添加一行ui->setupUi(this);
此时构建项目并运行,如下图所示:
qt单独编译ui文件,编程语言,ui,qt,c++
此图说明,至此,我们才真正地将UI文件添加进项目中。文章来源地址https://www.toymoban.com/news/detail-734553.html

总结

  1. 添加UI文件;
  2. 将UI文件与界面类进行关联;
  3. 修改UI文件中还未自动更正过来地信息;
  4. 设置界面类读取UI文件。

到了这里,关于[编程语言][C++][Qt]单独添加UI文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [QT编程系列-39]:用户界面UI - 样式表QSS与样式文件快速入门

    目录 1. 概述 2. CSS 3. QSS示例 4. QT样式表文件使用方法与步骤 5. QT内置样式 6. QT常见基本样式 Qt提供了一种称为Qt样式表(Qt Style Sheets)的机制,可以用于 自定义和美化Qt应用程序的用户界面(UI) 。 使用Qt样式表,你可以通过类似 CSS 的语法来定义UI元素的外观和布局,包括颜

    2024年02月04日
    浏览(39)
  • C语言——多文件编程

    把函数声明放在头文件xxx.h中,在主函数中包含相应头文件 在头文件对应的xxx.c中实现xxx.h声明的函数 当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头文件嵌套包含。 为了避免同一个文件被include多次,C/C++中有两种方式。 方法

    2024年02月10日
    浏览(33)
  • C语言编程之文件操作

      文件(File) 是程序设计中的一个重要的概念。所谓“文件”一般指存储在外部介质上 数据的集合 。一批数据是以文件的形式存放在外部介质(如磁盘)上。 操作系统 是 以文件为单位 对数据进行管理,也就是说,如果想找存在外部介质上的数据,必须先按 文件名 找到所

    2024年02月07日
    浏览(37)
  • Qt Visual Studio添加Qt ui和编译注意事项

    工程中需要新的界面 VS中新建Qt的ui文件,然后需要生成对应的.cpp 和 .h 文件 生成对应的三个文件.ui, xxx. cpp, xxx.h 但是此时在QtWidgetsTestClass.h 里面,包含了#include “ui_QtWidgetsTestClass.h”。 会提示找不到该文件。该文件的生成,需要使用到Qt的uic.exe程序 1.通过配置ui_QtWidgetsTest

    2024年02月02日
    浏览(54)
  • QT添加使用图片与UI资源

    1.1 添加新文件 1.2 添加QT - QT Resources File 【UI资源文件】 1.3 命名资源包名称 并 添加到项目文件 1.4 .pro 文件发生变化 += art.qrc 1.5 点击qrc文件,添加现有文件 - 添加进去的图片文件可以进行正常引用。 1.6 修改样式表,正常添加图片即可 2.1 添加新文件 2.2 添加 QT Designer Form 设计

    2024年01月17日
    浏览(37)
  • C语言编程之.H文件与.C文件的关系

    在C语言中,通常将程序的源代码分为.h文件和.c文件两类: .h文件(也称头文件)通常包含程序所需的函数、变量、类型和宏的声明,以便在其他文件中使用。 .c文件则包含这些函数、变量、类型和宏的实现或定义。 因此,可以将.h文件看作是对应的.c文件的接口或者声明文件

    2024年02月16日
    浏览(30)
  • C语言编程技巧 全局变量在多个c文件中公用的方法

    在使用C语言编写程序时,经常会遇到这样的情况:我们希望在头文件中定义一个全局变量,并将其包含在两个不同的C文件中,以便这个全局变量可以在这两个文件中共享。举个例子,假设项目文件夹\\\"project\\\"下有三个文件:main.c、common.c和common.h。在这种情况下,我们希望声明

    2024年02月14日
    浏览(32)
  • VS QT——ui不显示新添加成员(控件)||代码无提示

    场景1:新建项目,在ui里编辑之后,新添加的控件不显示代码提示。 场景2:成员 ui  报错 不允许使用不完整的类型  因为是刚开始学,花了两三天才找到解决办法。 网上方法: 重新编译 ui文件 + 重新扫描解决方案 (但是我这里还是无法解决) 根本原因:缺少xxx.ui 的头文

    2024年02月13日
    浏览(33)
  • QT学习记录(三)通过ui和代码的方式往窗口添加组件

    本文是b站教程的https://www.bilibili.com/video/BV1g4411H78N?p=5vd_source=a3efe214b8a2ba185e92e79cb6d6321b的笔记,外加自己的一些其他想法。如有侵权请联系。如有错误请指正。 通过拖拽,把一个按钮和一个label拖进去了。 新建了一个按钮对象,并通过setParent指定了父亲就是当前的主窗口。 当

    2024年02月07日
    浏览(39)
  • Qt学习笔记5---如何在Qt中添加资源文件

              前言: 在我们给Qt加上图片的时候,可以用本地资源添加的方式,但是此方法代码用的只能是本地资源,不好共享。那么我们可以把资源文件添加在Qt中,这样就不会出现这种问题啦! 第一步:在本地复制你想用的资源文件,点开项目的“在Explorer中显示”,粘贴

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包