QT自定义类如何访问ui中的控件

PZ_eng 2019-04-03 11:34:38
我自定义了一个按钮类,现在需要在这个类中操作主界面ui中的几个控件,但是我不知道怎么在自定义的类中访问ui中的控件,大佬们指点一下
...全文
2646 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
不易易 2020-04-10
  • 打赏
  • 举报
回复
引用 8 楼 jdwxy 的回复:
[quote=引用 7 楼 不易易 的回复:]
对的,自定义类里不要操作UI的控件,发信号就好了


我同意你的观点。但是这样开发的效率好低啊(对比delph、C#之类的,我是QT初学者)。[/quote]
都说只能在主线程操作UI,其实在子线程也可以操作,子类里也可以,但是容易出冲突或bug,非常不推荐!
jdwxy 2020-04-09
  • 打赏
  • 举报
回复
引用 7 楼 不易易 的回复:
对的,自定义类里不要操作UI的控件,发信号就好了
我同意你的观点。但是这样开发的效率好低啊(对比delph、C#之类的,我是QT初学者)。
不易易 2019-04-10
  • 打赏
  • 举报
回复
对的,自定义类里不要操作UI的控件,发信号就好了
走好每一步 2019-04-10
  • 打赏
  • 举报
回复
工作类通过信号传递数据或者指令, UI类槽函数响应,做对应的动作 UI类中初始化函数中 { work = new Work; connect(work, &Work::sigData, this, UIxxx::slotOnData); connect(work, &Work::sigCmd, this, UIxxx::slotOnCmd); } 你写工作类的时候,心里要想着这个类是响上级提供服务的,只能别人去调它,它不知道调用者是谁!! 工作类里不要带有任何UI的函数,不然换个UI,或者用户业务变化了,程序改起来很痛苦。 建议思考下信号和槽是怎么发明出来的,它和MFC的消息映射优劣在哪里。 建议阅读设计模式相关书籍。 建议去查阅UI和逻辑分离的本质是什么,为啥这样做。
PZ_eng 2019-04-10
  • 打赏
  • 举报
回复
引用 4 楼 走好每一步 的回复:
[quote=引用 3 楼 PZ_eng 的回复:]
我想有很多的自定义类,如何在这些类中访问ui中的控件


可以使用信号和槽技术,自定义的类,无非是许多工作类。
你直接访问UI控件,就不能把界面和逻辑分开了!
把工作类的信号和界面类的槽连接起来。
工作类达到某个条件,发出该信号。[/quote]
具体该怎么操作呢?是要把connect放到工作类,槽函数放到main里面?
走好每一步 2019-04-04
  • 打赏
  • 举报
回复
引用 3 楼 PZ_eng 的回复:
我想有很多的自定义类,如何在这些类中访问ui中的控件
可以使用信号和槽技术,自定义的类,无非是许多工作类。 你直接访问UI控件,就不能把界面和逻辑分开了! 把工作类的信号和界面类的槽连接起来。 工作类达到某个条件,发出该信号。
PZ_eng 2019-04-04
  • 打赏
  • 举报
回复
我想有很多的自定义类,如何在这些类中访问ui中的控件
PZ_eng 2019-04-04
  • 打赏
  • 举报
回复 1
引用 1 楼 puthon 的回复:
在自己的类里把界面类作为引用参数输入是可以的:

//类的.cpp文件
#include "test.h"
#include "ui_mainwindow.h"
Test::Test(){
}
void Test::SetText(MainWindow &mw){
mw.ui->lineEdit->setText("CodeLab");
}



//类的.h文件
#ifndef TEST_H
#define TEST_H
#include <mainwindow.h>
#include "ui_mainwindow.h"
class Test{
public:
Test();
void SetText(MainWindow &mw);
};
#endif // TEST_H



//mian.cpp进行调用
#include "mainwindow.h"
#include <QApplication>
#include <test.h>

int main(int argc, char *argv[]){
QApplication a(argc, argv);

MainWindow w;
w.show();
Test test;
test.SetText(w);
return a.exec();
}

不知道这样是否能实现你想要的功能

这不还是在mian.cpp里面调用吗,我要做的是代码分离,不在mian.cpp里面加其它无关的代码
puthon 2019-04-03
  • 打赏
  • 举报
回复
在自己的类里把界面类作为引用参数输入是可以的:

//类的.cpp文件
#include "test.h"
#include "ui_mainwindow.h"
Test::Test(){
}
void Test::SetText(MainWindow &mw){
    mw.ui->lineEdit->setText("CodeLab");
}

//类的.h文件
#ifndef TEST_H
#define TEST_H
#include <mainwindow.h>
#include "ui_mainwindow.h"
class Test{
public:
    Test();
    void SetText(MainWindow &mw);
};
#endif // TEST_H

//mian.cpp进行调用
#include "mainwindow.h"
#include <QApplication>
#include <test.h>

int main(int argc, char *argv[]){
    QApplication a(argc, argv);

    MainWindow w;
    w.show();
    Test test;
    test.SetText(w);
    return a.exec();
}
不知道这样是否能实现你想要的功能
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧