• 7607阅读
  • 0回复

[提问]中文支持, QFrame::showevent [复制链接]

上一主题 下一主题
离线btwo0
 

只看楼主 倒序阅读 楼主  发表于: 2007-01-23
中文支持, QFrame::showevent
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
大家好,我要在我的代码里能自动切换语言,现在是可以自动切换中,英文。为了能切换显示文字, 我重写了QWdiget::showEvent()这个函数, 部分代码如下:
class Frame: public QFrame
{
private:
  int nRows;
  QLabel **titles;
  QGridLayout *layout;
protected:
  void showEvent(QShowEvent *e);
...
};

Frame::Frame(QWidget *parent):QFrame(parent)
{
  titles = new QLabel * [nRows];
  layout = new QGridLayout(this);
  for(int i= 0; i<nRows;i++)
  {
      titles = new QLabel(this);
      layout->addWidget(titles, 0, i+1);      
  }
....
}
void Frame::showEvent(QShowEvent *e)
{
  for(int i=0;i<nRows;i++)
  {
  titles->setText( tr("this is a test") );
  }
  parentWidget()->adjustSize();
}
Frame::showEvent在每次显示之前都会被系统调用, tr()会判断locale, 返回我想显示的QString.
中,英文字的大小不一样,所以每次Frame::sizeHint()都是不一样的
结果是:这个Frame类在第一次show的时候,它的parentwidget总是保留上次的大小,只有第二次show或是以后显示,它的parentwidget才会正确的resize自己,如果locale是中文, Frame::size 会大一些,如果locale是英文, Frame::size会小一些
我尝试用QWidget::polish(), 但是好像文档里说, QFrame没实现polish()

我想让parentwidget总是能及时地知道它的childwidget::size, 并且立刻随之发生变化,有什么方法可以实现么?




快速回复
限100 字节
 
上一个 下一个