Qt中其他类调用窗口中的ui控件
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控件相关推荐
- C++ Qt中其他类调用窗口中的ui控件
目录 前言 方法 1 其他类必须继承QWidegt及其派生类 2 将主窗口UI公有化 3 定义一个静态的Widget指针 4 将mywidget指针中的ui指针传给UiOperationDlg.h中我 ...
- QT-子线程或自定义类操作访问主界面UI控件的几种方法
前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 1.将ui指针公开后直接访问 (1)例如有个自己 ...
- C# 子线程调用主线程窗口中的TextBox控件
使用情景 开发环境:VS 2013 Pro, .Net Framework 4.5 C# 开发窗口程序,需要在开辟的子线程中调用textbox控件,修改显示内容 直接调用会报错,原因是跨线程操作,需要 ...
- Qt中LineEdit、TextEdit 、PlainTextEdit三个控件的区别
Qt中LineEdit.TextEdit.PlainTextEdit这三个控件区别为:输入格式不同.用途不同.限制行数不同. 一.输入格式不同 1.LineEdit:LineEdit的输入格式为单行文 ...
- C# winform中一个类中如何调用另一个窗体的控件或方法
转载地址:http://blog.csdn.net/ichenqingyun/article/details/52622340 一种是创建窗体对象的方式,通过对象调用控件或方法 例如: Form1 f ...
- 关于Qt中QDialog对话框调用exec()函数界面退出造成僵尸程序问题
关于Qt中QDialog对话框调用exec函数产生的问题 问题一: 问题描述: 原因分析: 解决方案: 问题二: 问题描述: 求助:关于这个问题,学识尚浅,求大佬分析一波 问题一: QDialog对话 ...
- QT中Camera相机调用
一:摄像头配置 1.创建摄像头类,获取电脑端的所有摄像头 cameras = QCameraInfo::availableCameras(); //获取所有相机的列表 if (cameras.coun ...
- c#,c++,qt中多线程访问UI控件线程的问题汇总
c#和MFC中可以创建UI控件及模态/非模态对话框,Qt中只能在主UI线程中创建访问UI控件. c#和MFC中可以通过全局变量或指针句柄等方式在工作线程中访问其他UI线程控件,其中c#需要Invoke ...
- 在一个窗体中调用另一个窗体的控件或方法(C#)
在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...
- Qt 实现自定义Ui控件例子,以自定义的Slider为例(QWidget)
说明 Qt可以比较方便地实现自定义控件在Qt Creator中使用.网上也有很多大神的控件可以使用,但是如果想要自己简单定制也可以按照这个流程. 本文的要点: [1]如何实现一个自定义控件? 本文使用 ...
最新文章
- android手机播放pc音乐播放器,最强手机音乐播放器?Foobar2K安卓版体验
- java_opts gc回收器_JVM之垃圾回收机制(GC)
- ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
- C++中如何定义某个数组的引用?
- 提高MySQL数据库查询效率的几个技巧(转载)
- android 广告字幕,Android编程实现类似天气预报图文字幕垂直滚动效果的方法
- c语言程序设计怎么改卷,C语言程序设计(B卷)教程.doc
- 项目延期的4大原因及解决方案!
- 十六、C语言中的头文件与模块化设计
- 短视频SEO优化教程 自媒体SEO优化技巧方法
- 大数据 | 抖音,一款神奇的APP
- algorithm negotiation fail错误
- java11的下载与安装及环境配置
- macbookair有没有touchbar_如何评价新 MacBook Pro 上的 Multi-Touch Bar?
- cannot access memory
- wps将word文档转换为图片格式
- 如何让Markdown 表格整体居中?
- [.NET基础]走进各种位运算
- html5 直线的两头弯曲,html5教程 (二)(canvas绘制简单的直线)
- cad考试题库绘图题答案_CAD考试试题库及参考答案
热门文章
- 使用流程图描述程序的功能与流程
- OCR文字识别【前端渲染,后端进行逻辑处理】
- 保护计算机组件免受esd,TVS管与ESD保护二极管的区别
- 卡方检验的统计量推导_卡方检验如何计算?
- 【CVPR2021】论文汇总列表--Part1
- Python自动化办公之PDF拆分
- IDEA 导入 czml-writer
- 6s的充电电流怎么测试软件,用数字万用表测量手机充电器的充电电流的方法和问题...
- 来客电商之微信小程序怎么取名字
- tomcat+mysql+腾讯云_腾讯云服务器配置tomcat和mysql