请问一个UI怎么访问另一个UI的按钮资源?

cheng_law 2012-11-09 05:56:03
具体是这样

我创建了一个工程
文件内容大概:robot.cpp, robot.h, robot.ui, main.cpp
然后我在原有的工程中新增加了一个设计师界面类:文件有:calc.h, calc.cpp, calc.ui

其实我想做的是:在robot.ui界面上有个lineEdit 文本输入框,当我鼠标点击编辑框后,弹出一个界面(就是我新增加的界面calc.ui),calc.ui界面我主要用来布局0-9的数字输入按钮面板。(因为我要移植到手持盒上面去,是没有接键盘的,因此我需要设计一个数字输入面板)
如何将鼠标一点击文本框,就弹出来calc.ui,我已经实现了,用鼠标按钮事件....

各位大神,我的问题来了,如何在弹出的界面(calc.ui)上进行按键将0-9个数字,输入到robot.ui这个界面上的lineEdit文本框上面去?
问题描述的可能不太清楚(表达能力有限),说白了,就是在calc.cpp 里面怎么访问robot.ui里面的界面按钮,编辑框什么的。。

之前想过信号和槽来实现,但是我无法访问资源,我实例化了也不行(也有可能我实例化有问题)



...全文
458 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yediguhong 2014-06-06
  • 打赏
  • 举报
回复
引用 7 楼 heksn 的回复:
在按键的槽中向robot发信号,将按键信息作为参数发送过去
怎么发信号啊,两个不在一个cpp里面的啊,用什么函数可以实现这个功能
yediguhong 2014-06-04
  • 打赏
  • 举报
回复
楼主解决了吗 同求啊
cheng_law 2012-11-16
  • 打赏
  • 举报
回复
谢谢大家,还是自己研究好了!
挣扎中前行 2012-11-14
  • 打赏
  • 举报
回复
引用 4 楼 caogaoyang 的回复:
在calc.cpp 里面new一个robot.ui的类 就可以访问了
反过来在robit.h中为robit类添加一个calc的类成员,相互关联起来使用信号和槽就行了
__阿飞__ 2012-11-13
  • 打赏
  • 举报
回复
附上我自定义表盘的类定义代码,你可以参考,我感觉按照我的思路可以帮到你.

#ifndef NUMPAN_H
#define NUMPAN_H

#include <QFrame>
#include <QLabel>
#include "injlineedit.h"
#include "dialpan.h"
#include "mainwindow.h"
//#include "msgthread.h"

class msgthread;

namespace Ui {
    class numpan;
}

class numpan : public QFrame
{
    Q_OBJECT

public:
    explicit numpan(QWidget *parent = 0);
    ~numpan();
    //打开键盘
    void openNumPan();
    //关闭键盘
    void closeNumPan();
    //设置标志位
    void setOpenCloseFlag(bool flag);
    //取得标志位
    bool getOpenCloseFlag();
    //设置键盘类型
    void setType(int type);
    //获得键盘类型
    int getType();
    void cal(int num);
    //设置显示的label
    void setShowTextLabel(injlineedit *label);
    //取得显示的label
    injlineedit *getShowTextLabel();
    //显示框的值
    double keyvalue;

//    msgthread msg;

    //动态表盘设置
    void setDialPan(dialpan *pan);
    dialpan *getDialPan();
    void showPan(int pantype, double value);
    void updatePan();

    //设置mainwindow出现警告提示
    void setMainWindow(mainwindow *m);
    mainwindow *getMainWindow();

private:
    Ui::numpan *ui;
    //打开关闭的标志位
    bool opencloseflag;
    int type;
    injlineedit *showtextlabel;
    //动态表盘
    dialpan *pan;
    mainwindow *m;

private slots:
    /*数字键盘slots*/
    //    'C'键处理
    void on_numkeyclear_clicked();
    //    '.'键处理
    void on_numkeydot_clicked();
    //    按键0处理
    void on_numkey0_clicked();
    //    按键1~9处理
    void on_numkey1_clicked();
    void on_numkey2_clicked();
    void on_numkey3_clicked();
    void on_numkey4_clicked();
    void on_numkey5_clicked();
    void on_numkey6_clicked();
    void on_numkey7_clicked();
    void on_numkey8_clicked();
    void on_numkey9_clicked();

signals:
    void sig_bell();

};

#endif // NUMPAN_H

__阿飞__ 2012-11-13
  • 打赏
  • 举报
回复
我做过跟你这个类似的模块.我实现的办法是这样的.
1:数字键盘单独设计个类,继承QFrame,比如叫做:numpan然后自己拖拽按钮布局等等数字键盘设计完成.
2:欲实现的效果是在主界面有个文本框,点击之后数字键盘弹出.那么我就在主界面上面拖拽一个QFrame,比如叫做:numframe,然后选中鼠标右击使得numframe提升为numpan类,这样这个numframe就具有了numpan的一切特性了.
3:在主界面点击文本框之后,就可以直接自定义点击的槽函数了,通过ui->numpan这样去调用这个数字键盘的显示隐藏还有赋值等等.
附上效果图如下:

moxiaofeng77 2012-11-12
  • 打赏
  • 举报
回复
用信号槽完全可以实现,calc.ui点击数字时发送信号给robot.ui,在robot.ui的相关槽中实现对lineEdit的编辑
  • 打赏
  • 举报
回复
在按键的槽中向robot发信号,将按键信息作为参数发送过去
polly_polly 2012-11-12
  • 打赏
  • 举报
回复
引用 5 楼 moxiaofeng77 的回复:
用信号槽完全可以实现,calc.ui点击数字时发送信号给robot.ui,在robot.ui的相关槽中实现对lineEdit的编辑
+1
leavor 2012-11-11
  • 打赏
  • 举报
回复
在calc.cpp 里面new一个robot.ui的类 就可以访问了
coblan 2012-11-10
  • 打赏
  • 举报
回复
#inclde "ui_robot.h"或者 "ui_calc.h"什么的。 然后试试能访问到你的窗口吗?只要能找到窗口的指针,没有说访问不到的。逻辑可以C++的强项啊。别给我说你没有设置一个成员变量或者全局变量的来保存对方的指针哦。。。 在calc窗口里面给lineEdit发事件也可以。
  • 打赏
  • 举报
回复
用信号槽呢。 当你lineedit编辑的时候。把当前的字符串内容发过去就好了。
三杨 2012-11-09
  • 打赏
  • 举报
回复
建议把代码贴出来,看病总得见病人是吧。

16,818

社区成员

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

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