大家好,我要在我的代码里能自动切换语言,现在是可以自动切换中,英文。为了能切换显示文字, 我重写了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, 并且立刻随之发生变化,有什么方法可以实现么?