QUiLoader:彻底分离你的Ui设计工作

这篇具有很好参考价值的文章主要介绍了QUiLoader:彻底分离你的Ui设计工作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. QUiLoader:彻底分离你的Ui设计工作

原文链接:https://blog.csdn.net/adonis1620/article/details/5794797

Trolltech提供的界面所见即所得工具designer极大的简化了开发者花费在UI布局上的时间。但一部分喜欢在终端上开发的工程师认为拖拖拉拉这种伎俩实在是”雕虫小技,壮夫不为“也。即使专门的界面设计师为他设计.ui文件的话,他也嫌来来回回的重新编译麻烦。乐于自己通过QLayout手写代码进行设计。

那么QUiLoader这个工具,则可以真正做到程序师和界面师做到“鸡犬相闻,不相往来”, .ui文件不需要重新编译,就可以被程序加载,生成新的外观。

我们来看QUiLoader的实用方法

QUiLoader loader;
QFile file(“cuteqt.ui”);
file.open(QFile::ReadOnly);
QWidget *formWidget = loader.load(&file, this);

通过load函数即可根据.ui文件创建出一个对应的QWidget对象,后面的this指针是QWidget *类型的,你可以用其它窗体去作为formWidget的父窗体。父窗体被显示的时候,该formWidget窗体就会被显示,当然更好的方法是用一个QLayout来管理formWidget,因为父窗体可能不止一个子窗体。

如果你还想对cuteqt.ui中的那些子窗体信号作处理,那么可以用qFindChild去找到它们。

ui_setButton = qFindChild<QPushButton*>(this, “setButton”);
ui_clearButton = qFindChild<QPushButton*>(this, “clearButton”);
ui_textEdit = qFindChild<QTextEdit*>(this, “textEdit”);

比如你可以用
connect(ui_setButton,SIGNAL(clicked()),this,SLOT(setButtonClicked()));处理ui_setButton的clicked()信号。
但拜元对象机制所赐,还有一劳永逸的方法
QMetaObject::connectSlotsByName(this);该函数会将this的所有子对象都连接上一个槽(slot),槽的命名规范为
on_对象名_信号名,比如上面的setButton的clicked(),将会生成一个on_setButton_clicked()的槽,你只要实现该槽函数就可以了。

怎样,动态加载.ui文件的方法是不是很简单?而且这样做的好处至少有两个

  1. 前期的设计会更准确,程序师和界面师只要协商好有哪些对象就可以分头工作了,彼此互不依赖
  2. 界面可以独立于应用发布

下面是我的一个小例子。设计了两个ui,界面分别为(略)

在想用界面1的时候,只要 cp cuteqt.ui.1 cuteqt.ui 然后运行./uiloader即可
同理,在想用界面2的时候,只要 cp cuteqt.ui.2 cuteqt.ui 然后运行./uiloader即可
这中间不需要改动你的代码~

在pro工程文件中添加:

QT       += uitools

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUiLoader>
#include <QFile>
#include <QVBoxLayout>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void btnClicked(void);

private:
    Ui::Widget *ui;
    QRadioButton *radioBtn;
    QCheckBox *checkBox;
QPushButton *btn1;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QUiLoader loader;
    QFile file("myui1.ui");
    /* 或QFile file(R"(E:/work src/test/QtWidgetsApplication1/QtWidgetsApplication1/Widget.ui)"); */
    file.open(QFile::ReadOnly);
    QWidget *myWidget = loader.load(&file);
//    file.close();

 /* 1.查找名称为“testBtn”QPushButton */
    btn1 = myWidget->findChild<QPushButton *>("pushButton"); //pushButton为控件对象指针
    radioBtn = myWidget->findChild<QRadioButton *>("radioButton"); //radioButton为控件对象指针
    checkBox = myWidget->findChild<QCheckBox *>("checkBox"); //checkBox为控件对象指针

//    auto *layout = new QVBoxLayout;
//    layout->addWidget(myWidget);
//    //ui.centralWidget->setLayout(layout);
//    setLayout(layout);
    if(myWidget != nullptr){
        myWidget->show();
        connect(btn1, &QPushButton::clicked, this, &Widget::btnClicked);
    }

}

Widget::~Widget()
{
    delete ui;
}

void Widget::btnClicked()
{
    radioBtn->setChecked(true);
    checkBox->setChecked(true);
}

QUiLoader:彻底分离你的Ui设计工作,Qt经验总结,ui

2. Qt、C++动态UI

https://blog.csdn.net/qq_31286321/article/details/131144112

3. QT 使用QLibrary加载动态库

https://blog.csdn.net/qq_32348883/article/details/126526701文章来源地址https://www.toymoban.com/news/detail-614788.html

到了这里,关于QUiLoader:彻底分离你的Ui设计工作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • UI美工设计岗位的工作职责

      UI美工设计岗位的工作职责1 职责: 1、负责软件界面的美术设计、创意工作和制作工作; 2、根据各种相关软件的用户群,提出构思新颖、有高度吸引力的创意设计; 3、对页面进行优化,使用户操作更趋于人性化; 4、维护现有的应用产品; 5、收集和分析用户对于GUI的需求; 6、

    2024年02月13日
    浏览(36)
  • Python学习笔记——PySide6设计GUI应用之UI与逻辑分离

    1、打开PySide6的UI设计工具pyside6-designer,设计一个主窗口,保存文件名为testwindow.ui 2、使用PySide6的RCC工具把testwindow.ui文件转换为testwindow_rc.py文件,此文件中有一个类Ui_MainWindow(包含各种控件对象) 一、通过类继承实现: class TestMainWindow(QMainWindow, Ui_MainWindow): 定义了一个新的

    2024年04月16日
    浏览(55)
  • UI设计师个人工作感悟5篇

      UI设计师个人工作感悟一 工作一年了,结合我自身谈谈UI设计的重要性。现在主流的论坛建站程序有两种 Phpwind 和Discuz(Phpwind被阿里巴巴收购 Discuz被腾讯收购这两个论坛程序都是开源免费的),利用这两种程序我都分别建立过论坛,我第一次用的是Phpwind 后来我转用了Discuz(当

    2024年02月13日
    浏览(48)
  • 提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除

    虚拟现实(VR)和增强现实(AR)是新兴技术,为各个行业带来了许多新的机会。教育、游戏、医疗等领域也不例外。这些技术可以用于创造更现实的体验,增强学生和患者的参与度和记忆力,同时也可以为游戏玩家提供更丰富的游戏体验。 在教育领域,AR/VR技术可以为学生提

    2024年02月09日
    浏览(38)
  • 【QT】混合UI设计

    虽然利用Designer和代码的设计方式都可以开发GUI,但是毫无疑问的是最有效的开发方式是利用两者进行混合开发。 下面这个实验例子来自《QT5.9 C++开发指南》,我做了小部分修改,最终效果是这样: 这次我们要开发的是一个有工具栏、菜单栏、标题栏等组成的GUI,所以毫无疑

    2024年02月12日
    浏览(36)
  • 麓言信息0基础学UI设计如何更好找工作?

      为什么UI设计师觉得工作难找     万众创业,互联网+的概念,让无数人和资金涌入互联网行业,互联网创业公司层出不穷,也不缺钱。对相关人才的需求水涨船高,招的人自然就多。来有10个人在找UI设计的工作,但是整个市场需要8个UI设计师,所以只要你能力在前8

    2024年02月10日
    浏览(38)
  • qt 可视化ui设计

    QMainWindow 是主窗口类,主窗口类具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口; QWidget是所有具有可视界面类的基类,选择QWidget创建的界面对各种界面组件都可以支持; QDialog是对话框类,可建立一个基于对话框的界面。 .ui 文件 后缀为.ui 的文件是可视化

    2024年02月15日
    浏览(41)
  • UI 设计师的工作职责是什么?需要掌握哪些技能?

    什么是 UI 设计? UI 设计是设计用户界面的一门学科。用户界面是一个人与应用程序、网站或软件之间的联系。类似于平面设计和网页设计,UI 设计者是一种视觉设计师。 即时设计 - 可实时协作的专业 UI 设计工具 即时设计是一款支持在线协作的专业级 UI 设计工具,支持 Sk

    2024年04月08日
    浏览(55)
  • Qt5.9 UI设计(七)——统一样式设计

    前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用。样式设计最终的显示效果如下图: 将stylesheet.qss 样式文件添加进工程 stylesheet.qss 内容如下: 为应用程序添加LOGO图标 加载统一样式 最终设计效果如下图,到这里简单的UI设计部分已经实现

    2023年04月16日
    浏览(86)
  • Qt Designer UI设计布局小结

    前言 本文总结了在开发Qt应用程序时使用 Designer 进行UI布局的一些心得体会。Qt Designer是Qt提供的一个可视化界面设计工具,旨在帮助开发人员快速创建和布局用户界面。它提供了丰富的布局管理器和控件,并支持直观的拖拽和放置操作,使得UI设计变得简单而高效。下面将按

    2024年02月09日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包