Qt中其他类调用窗口中的ui控件

  • 操作步骤
    • 一、其他类必须继承QWidegt及其派生类
    • 二、将主窗口UI公有化
    • 三、定义一个静态的Widget指针
    • 四、将mywidget 指针中的ui指针传给Test中我们定义的ui指针
  • 代码
  • 个人建议

操作步骤

假设我们有一个类Test需要调用主窗口中的ui控件,但是没有ui指针,如何将ui指针传过去呢?

一、其他类必须继承QWidegt及其派生类

一个类如果想要使用ui控件,必须继承QWidegt及其派生类,否则无法调用ui指针

class Test : public QWidget
{Q_OBJECT
public:explicit Test(QWidget *parent = nullptr);
signals:public slots:
};#endif // TEST_H

二、将主窗口UI公有化

将widget.h 中的私有的ui指针公有化

public:Widget(QWidget *parent = nullptr);~Widget();Ui::Widget *ui;
private://Ui::Widget *ui;

三、定义一个静态的Widget指针

我们需要定义一个公有的静态Widget指针从widget中将ui传入到Test类中,否则即使Test类中载入#include "widget.h"和#include "ui_widget.h"也无法调用ui指针

class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();static Widget *mywidget;   //此处定义了一个mywidget指针Ui::Widget *ui;
private://Ui::Widget *ui;
};

然后在.cpp文件中将指针初始化

Widget* Widget::mywidget = nullptr;

将我们主窗口的this传给mywidget

mywidget = this;

四、将mywidget 指针中的ui指针传给Test中我们定义的ui指针

class Test : public QWidget
{Q_OBJECT
public:explicit Test(QWidget *parent = nullptr);Ui::Widget *ui = Widget::mywidget->ui;
signals:public slots:
};

这样就可以在Test中通过ui指针调用ui控件

代码

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();static Widget *mywidget;Ui::Widget *ui;private://Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "test.h"Widget* Widget::mywidget = nullptr;Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);mywidget = this;Test t;t.mybutton();
}
Widget::~Widget()
{delete ui;
}

test.h

#ifndef TEST_H
#define TEST_H#include <QWidget>
#include "widget.h"
#include "ui_widget.h"class Test : public QWidget
{Q_OBJECT
public:explicit Test(QWidget *parent = nullptr);Ui::Widget *ui = Widget::mywidget->ui;void mybutton();
};
#endif // TEST_H

test.cpp

#include "test.h"
Test::Test(QWidget *parent) : QWidget(parent)
{}
void Test::mybutton()
{ui->pushButton->setText("操作成功");
}

个人建议

不建议将ui公有化,这样会使程序不安全,在写项目时会出现各种各样的错误,可以在其他类中发送信号,在窗口类中使用槽函数进行接受。

Qt中其他类调用窗口中的ui控件相关推荐

  1. C++ Qt中其他类调用窗口中的ui控件

    目录 前言 方法 1 其他类必须继承QWidegt及其派生类 2 将主窗口UI公有化 3 定义一个静态的Widget指针 4 将mywidget指针中的ui指针传给UiOperationDlg.h中我 ...

  2. QT-子线程或自定义类操作访问主界面UI控件的几种方法

    前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...

  3. C# 子线程调用主线程窗口中的TextBox控件

    使用情景 开发环境:VS 2013 Pro, .Net Framework 4.5 C# 开发窗口程序,需要在开辟的子线程中调用textbox控件,修改显示内容 直接调用会报错,原因是跨线程操作,需要 ...

  4. Qt中LineEdit、TextEdit 、PlainTextEdit三个控件的区别

    Qt中LineEdit.TextEdit.PlainTextEdit这三个控件区别为:输入格式不同.用途不同.限制行数不同. 一.输入格式不同 1.LineEdit:LineEdit的输入格式为单行文 ...

  5. C# winform中一个类中如何调用另一个窗体的控件或方法

    转载地址:http://blog.csdn.net/ichenqingyun/article/details/52622340 一种是创建窗体对象的方式,通过对象调用控件或方法 例如: Form1 f ...

  6. 关于Qt中QDialog对话框调用exec()函数界面退出造成僵尸程序问题

    关于Qt中QDialog对话框调用exec函数产生的问题 问题一: 问题描述: 原因分析: 解决方案: 问题二: 问题描述: 求助:关于这个问题,学识尚浅,求大佬分析一波 问题一: QDialog对话 ...

  7. QT中Camera相机调用

    一:摄像头配置 1.创建摄像头类,获取电脑端的所有摄像头 cameras = QCameraInfo::availableCameras(); //获取所有相机的列表 if (cameras.coun ...

  8. c#,c++,qt中多线程访问UI控件线程的问题汇总

    c#和MFC中可以创建UI控件及模态/非模态对话框,Qt中只能在主UI线程中创建访问UI控件. c#和MFC中可以通过全局变量或指针句柄等方式在工作线程中访问其他UI线程控件,其中c#需要Invoke ...

  9. 在一个窗体中调用另一个窗体的控件或方法(C#)

    在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...

  10. Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)

    说明 Qt可以比较方便地实现自定义控件在Qt Creator中使用.网上也有很多大神的控件可以使用,但是如果想要自己简单定制也可以按照这个流程. 本文的要点: [1]如何实现一个自定义控件? 本文使用 ...

最新文章

  1. android手机播放pc音乐播放器,最强手机音乐播放器?Foobar2K安卓版体验
  2. java_opts gc回收器_JVM之垃圾回收机制(GC)
  3. ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
  4. C++中如何定义某个数组的引用?
  5. 提高MySQL数据库查询效率的几个技巧(转载)
  6. android 广告字幕,Android编程实现类似天气预报图文字幕垂直滚动效果的方法
  7. c语言程序设计怎么改卷,C语言程序设计(B卷)教程.doc
  8. 项目延期的4大原因及解决方案!
  9. 十六、C语言中的头文件与模块化设计
  10. 短视频SEO优化教程 自媒体SEO优化技巧方法
  11. 大数据 | 抖音,一款神奇的APP
  12. algorithm negotiation fail错误
  13. java11的下载与安装及环境配置
  14. macbookair有没有touchbar_如何评价新 MacBook Pro 上的 Multi-Touch Bar?
  15. cannot access memory
  16. wps将word文档转换为图片格式
  17. 如何让Markdown 表格整体居中?
  18. [.NET基础]走进各种位运算
  19. html5 直线的两头弯曲,html5教程 (二)(canvas绘制简单的直线)
  20. cad考试题库绘图题答案_CAD考试试题库及参考答案

热门文章

  1. 使用流程图描述程序的功能与流程
  2. OCR文字识别【前端渲染,后端进行逻辑处理】
  3. 保护计算机组件免受esd,TVS管与ESD保护二极管的区别
  4. 卡方检验的统计量推导_卡方检验如何计算?
  5. 【CVPR2021】论文汇总列表--Part1
  6. Python自动化办公之PDF拆分
  7. IDEA 导入 czml-writer
  8. 6s的充电电流怎么测试软件,用数字万用表测量手机充电器的充电电流的方法和问题...
  9. 来客电商之微信小程序怎么取名字
  10. tomcat+mysql+腾讯云_腾讯云服务器配置tomcat和mysql