找回密码
 注册
查看: 820|回复: 0

请教:翻译带来的显示问题,QTranslator的使用问题

[复制链接]
发表于 2006-7-29 09:02:13 | 显示全部楼层 |阅读模式
小弟写了一个可以管理系统服务信息的软件,主窗口界面上置一列表视图用以显示系统服务的相关信息.主界面窗口类如下:
[code:1]
class SrvMainGUI: public MainGUI
{
    Q_OBJECT
   
public:
    SrvMainGUI();
    ~SrvMainGUI();
    void refresh_selected_service();
public slots:
        virtual void do_runlevel_select(QAction*);
   virtual void do_property();
   virtual void do_start();
   virtual void do_stop();
   virtual void do_restart();
   virtual void do_refresh(); // 刷新主界面列表视图内容;
   virtual void do_exit();

   virtual void select_changed(QListViewItem* );

//省略一些获取服务项属性的函数;
   
private:
    ServiceManager *sm; //服务管理器,存储了所有要显示的服务项;

};
[/code:1]


      程序很简单,在主窗口类的构造函数中读取所有服务项,然后do_refresh()刷新列表视图内数据;
      主函数如下所示:
[code:1]
int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    SrvMainGUI w;

    w.show();
   
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );

    return a.exec();
}
[/code:1]

      此时,程序是正常运行的,把服务项的信息显示于列表视图;
      然后,小弟对该程序作汉化,通过lupdate lrelease 等一系列命令后得到SoftService.qm文件,第一次做国际化的事情,至此一切顺利,于是乎飘飘然,接着在主函数中添加翻译类代码如下:

[code:1]
int main( int argc, char ** argv )
{
    QApplication a( argc, argv );
    SrvMainGUI w;

    QTranslator  *translator = new QTranslator(0);//定义翻译类

    translator->load("SoftService.qm", "."); //加载qm文件

    a.installTranslator(translator ); //为应用程序绑定翻译类

    w.show();
   
    a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );

    return a.exec();

}
[/code:1]

    然后 make
    ./service_manager 运行
       问题来了,虽然主窗口界面上的"abc"都变成了"甲乙丙"(翻译类工作ing),但窗口上列表视图中空空如也; 但是根据我设置的调试宏来看,do_refresh()是执行了的,而且服务项的数据确实也读入了sm中,那为什么不显示呢? 诧异之余点击了一下窗口上的工具条上 "刷新"按钮(该按钮触发信号对应的槽是do_refresh() ), 奇迹发生了,列表视图中的各服务项均跃然于屏幕;
      深感不解,为什么要手动的刷新一下,数据才会出来呢? 而添加翻译类之前并不需要这么做,难道是翻译类引起的问题???难道这里也存在缓冲的问题,不知道,但个人觉得跟翻译类的显示相关的机制有关,深深的困惑ing......

      篇幅有点长,望高手见谅并赐教,谢谢;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-6 18:56 , Processed in 0.021480 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表