QT QLable setText(QString)不显示QString里的内容

#include "dlgyao.h"
#include <cstdio>
#include <cstdlib>
#include <ctime>
DlgYao :: DlgYao(QWidget *parent)
: QWidget(parent)
{
this->resize(WIN_WIDTH,WIN_HEIGHT);
this->move(1920 / 2 - 200,1080 / 2 - 150);

lbl = new QLabel(this);
lbl->setIndent(50);
lbl->setMargin(200 / 2);
//lbl->setText();

btn = new QPushButton(QString("start"),this);
btn->resize(BTN_WIDTH,BTN_HEIGHT);
btn->move(WIN_WIDTH / 2 - BTN_WIDTH/2,WIN_HEIGHT /2 + BTN_HEIGHT /2);

srand(time(0));
//绑定线程和我们的信号函数
connect(btn,SIGNAL(clicked()),this,SLOT(ChText()));
}

void DlgYao :: ChText()
{
//实现改变细节
int num;
num = rand() % 10;
str = lbl->text() + QString::number(num);
//str明明有值,为什么输出不出来??
lbl->setText(str);
lbl->repaint();
printf("%s\n",str.toAscii().data());
}

DlgYao :: ~DlgYao()
{
delete lbl;
delete btn;
}

我在标准输出中明明看到str有值,为什么setText却无法输出?掉了repaint重画也没用。

个人觉得:ui界面显示线程跟获取的变量不在同一个线程,将变量的值通过信号槽的方式传递,然后槽函数中使用label.setText()方法显示即可。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-17
lbl->repaint();
去掉 试试本回答被网友采纳
第2个回答  2014-12-15
建议把label的宽度和高度设置的大一点看看
相似回答