首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

请教一个UI如何访问另一个UI的按钮资源

2012-12-14 
请问一个UI怎么访问另一个UI的按钮资源?本帖最后由 cheng_law 于 2012-11-09 17:57:05 编辑具体是这样我创

请问一个UI怎么访问另一个UI的按钮资源?
本帖最后由 cheng_law 于 2012-11-09 17:57:05 编辑      具体是这样

       我创建了一个工程
       文件内容大概: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里面的界面按钮,编辑框什么的。。

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




[最优解释]
用信号槽完全可以实现,calc.ui点击数字时发送信号给robot.ui,在robot.ui的相关槽中实现对lineEdit的编辑
[其他解释]
在按键的槽中向robot发信号,将按键信息作为参数发送过去
[其他解释]
我做过跟你这个类似的模块.我实现的办法是这样的.
1:数字键盘单独设计个类,继承QFrame,比如叫做:numpan然后自己拖拽按钮布局等等数字键盘设计完成.
2:欲实现的效果是在主界面有个文本框,点击之后数字键盘弹出.那么我就在主界面上面拖拽一个QFrame,比如叫做:numframe,然后选中鼠标右击使得numframe提升为numpan类,这样这个numframe就具有了numpan的一切特性了.
3:在主界面点击文本框之后,就可以直接自定义点击的槽函数了,通过ui->numpan这样去调用这个数字键盘的显示隐藏还有赋值等等.
附上效果图如下:


[其他解释]
建议把代码贴出来,看病总得见病人是吧。
[其他解释]
#inclde "ui_robot.h"或者 "ui_calc.h"什么的。
然后试试能访问到你的窗口吗?只要能找到窗口的指针,没有说访问不到的。逻辑可以C++的强项啊。别给我说你没有设置一个成员变量或者全局变量的来保存对方的指针哦。。。
在calc窗口里面给lineEdit发事件也可以。

[其他解释]
用信号槽呢。 当你lineedit编辑的时候。把当前的字符串内容发过去就好了。
[其他解释]
在calc.cpp 里面new一个robot.ui的类  就可以访问了
[其他解释]

引用:
用信号槽完全可以实现,calc.ui点击数字时发送信号给robot.ui,在robot.ui的相关槽中实现对lineEdit的编辑


+1
[其他解释]
附上我自定义表盘的类定义代码,你可以参考,我感觉按照我的思路可以帮到你.


#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


[其他解释]
引用:
在calc.cpp 里面new一个robot.ui的类  就可以访问了


反过来在robit.h中为robit类添加一个calc的类成员,相互关联起来使用信号和槽就行了
[其他解释]
谢谢大家,还是自己研究好了!

热点排行