• 7681阅读
  • 2回复

[提问]如何实现访问另外一个类得public 成员/事件过滤器?/QComboBox 属性设置? [复制链接]

上一主题 下一主题
离线zshxie
 

只看楼主 倒序阅读 楼主  发表于: 2011-06-08


故障现象:
  程序运行时,只要有焦点事件,输入法的软键盘就弹出(该软键盘的弹出控制见:PinyinImpl.cpp, 第159行。
下面是该软键盘弹出控制函数:
void QPinyinImpl::updateHandler(int type)
{
        switch(type)
        {
        case QWSInputMethod::FocusOut:
            m_showForm->hide();
            m_qvkeybord->hide();
            m_pinyin_frame->releaseKeyboard();
            m_pinyin_frame->resetState();
            m_pinyin_frame->m_engine.save_table();
            isWork = false;
                break;
        case QWSInputMethod::FocusIn:   //此处为PinyinImpl.cpp, 第159行
                m_showForm->show();
                if(qvKeybordShow)  m_qvkeybord->show();
                m_pinyin_frame->grabKeyboard();
                isWork = true;
                break;
        default:
                break;
        }
}
当ui界面上的QLineEdit获得焦点事件时,软键盘弹出是正确的,能够在QLineEdit上实现输入法。
现在的问题是:当其他widget ,比如点击界面上的fontComboBox 或者sizecombobox,使焦点事件移到这两个输入框,准备选择字体或尺寸的时候,由于PinyinImpl.cpp, 第159行
控制的软键盘也同时弹出,导致上面的×Combobox缩回,无法进行选择。
针对这个情况,想了三种可能的解决思路,
1.在软件中pmjedit.h 的public 中添加bool popup 检测焦点事件,当fontComboBox 或者sizecombobox获得焦点事件时,popup=true;在PinyinImpl.cpp 中调用popup,修改
PinyinImpl.cpp, 第159行的软件如下,并在PinyinImpl.h中添加pmjedit.h头文件后,
void QPinyinImpl::updateHandler(int type)
{
        switch(type)
        {
        case QWSInputMethod::FocusOut:
            m_showForm->hide();
            m_qvkeybord->hide();
            m_pinyin_frame->releaseKeyboard();
            m_pinyin_frame->resetState();
            m_pinyin_frame->m_engine.save_table();
            isWork = false;
                break;
        case QWSInputMethod::FocusIn:   //此处为PinyinImpl.cpp, 第159行
             if(!popup){   m_showForm->show();
                if(qvKeybordShow)  m_qvkeybord->show();
                m_pinyin_frame->grabKeyboard();
                isWork = true;}
                break;
        default:
                break;
        }
}
无法编译通过,提示PinyinImpl.cpp中的popup没有定义。我试过 friend class ,static,都不行,也尝试在 PinyinImpl 中对PmjEdit  这个类进行实例化:PmjEdit pmj; 然后调用pmj.popup.实例化可以通过编译,但是编译后的结果无法在开发板上运行。针对第一种思路问题如下:如何在一个类中调用另一个类得函数?具体到我这个函数,应该如何调用呢?

2.添加事件过滤器。
对fontComboBox 和sizecombobox安装事件过滤器,现在的问题是:有没有可能通过事件过滤器来设置QWSInputMethod::FocusIn,当fontComboBox 或者sizecombobox获得焦点事件时,sentEvent(),使得QWSInputMethod::FocusIn改变为QWSInputMethod::FocusOut , 达到不弹出键盘,实现对fontComboBox 或者sizecombobox的弹出窗口的点选。
3.是不是可以设置fontComboBox 或者sizecombobox的某种属性,使其强制在最前面,直到选择完毕?如果可以,应该如何做?

附件中的是简单的例子源程序。在不考虑上述问题的情况下,已经在vm6.5,fc10 qt-4.5-forarm编译通过并在开发板上正常运行。
谢谢各位。
离线zshxie

只看该作者 1楼 发表于: 2011-06-08
附件貌似很难传啊
离线XChinux

只看该作者 2楼 发表于: 2011-06-08
确实,PHPWind 8.5的附件改得没有以前的好用了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个