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

PZ_eng 2019-04-03 11:34:38
我自定义了一个按钮类,现在需要在这个类中操作主界面ui中的几个控件,但是我不知道怎么在自定义的类中访问ui中的控件,大佬们指点一下
...全文
2517 9 打赏 收藏 转发到动态 举报
写回复
用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();
}
不知道这样是否能实现你想要的功能

16,213

社区成员

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

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