不更新 QLabel 值

Posted

技术标签:

【中文标题】不更新 QLabel 值【英文标题】:Not updating QLabel value [closed] 【发布时间】:2021-05-25 06:39:39 【问题描述】:

我想读取一个数据文件并使用 QLabel 打印数据的大小。我只能在读取数据之前调用 setText ,所以它返回 0 并且在我读取数据后不会改变。您能否帮助我了解如何在读取数据后更新 Qlabel 的值?

MainInterfaceWindow::MainInterfaceWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainInterfaceWindow)
  ui->label->setText(QString::number(ui->openGLWidget->m_size));
 

void Canvas::DoDataRelatedStuff
     ...
     m_size= dataSize.size();
   

【问题讨论】:

【参考方案1】:

给你的画布类添加一个信号

// Canvas.h
class Canvas : public /* base class */ 
    // required in header
    Q_OBJECT 

// ... other class stuff ...

signals:
   void dataSizeChanged(int size);


在您的 MainInterfaceWindow 中,将该信号连接到更新文本的 lambda 函数:

MainInterfaceWindow::MainInterfaceWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainInterfaceWindow)
  ui->label->setText(QString::number(ui->openGLWidget->m_size));

  connect(ui->openGLWidget, &Canvas::dataSizeChanged, ui->label, 
    [](auto size) ui->label->setText(QString::number(size)); );
 

【讨论】:

以上是关于不更新 QLabel 值的主要内容,如果未能解决你的问题,请参考以下文章

当 QLabel 的内容从另一个线程更新时,GIF 不动画

自动调整 QLabel 的大小以适应更新的 QTableWidget 跨度

Qt - SIGNAL & SLOT 没有从工人阶级更新我在主窗口中的 QLabel

如何更新 QLabel 以显示 QImage

除非主窗口未聚焦,否则不会更新 QLabel

除非主窗口未聚焦,否则不会更新 QLabel