【问题标题】:Refresh QLabel in a QWidget在 QWidget 中刷新 QLabel
【发布时间】:2015-03-30 15:08:47
【问题描述】:

我创建了一个应用程序,用于在 c++ 和 Qt 中显示文件夹和文件。

我添加了一个信息部分,它应该显示文件和文件夹的数量。

要做锯,我创建了一个布局和小部件,如下所示:

void MainWindow::createInfoSection()
{
    uint64_t space;
    CreateInfoSection = new QWidget();
    CreateInfoSection->setFixedHeight(40);

    //QGridLayout *CreateInfoLayout = new QGridLayout(CreateInfoSection);
    CreateInfoLayout = new QGridLayout(CreateInfoSection);
    NbOfFolderLabel = new QLabel(tr("%1 Folders").arg(m_device.getNbOfFolder()));
    NbOfFilesLabel = new QLabel(tr("%1 Files").arg(m_device.getNbOfFiles()));

    space = m_device.getAvailableFreeSpaceInBytes();

    if(space < MEGABYTE)
        SpaceAvailLabel = new QLabel(tr("%1 KB Remaining").arg(space/KILOBYTE));
    else if (space < GIGABYTE)
        SpaceAvailLabel = new QLabel(tr("%1 MB Remaining").arg(space/MEGABYTE));
    else
        SpaceAvailLabel = new QLabel(tr("%1 GB Remaining").arg(space/GIGABYTE));

    NbOfFolderLabel->updatesEnabled();
    NbOfFilesLabel->updatesEnabled();
    SpaceAvailLabel->updatesEnabled();

    CreateInfoLayout->addWidget(NbOfFolderLabel, 0,0);
    CreateInfoLayout->addWidget(NbOfFilesLabel, 0,1);
    CreateInfoLayout->addWidget(SpaceAvailLabel, 0,2);
    CreateInfoLayout->setAlignment(Qt::AlignCenter);
}

当一个动作完成时,比如添加一个文件夹,我正在调用如下刷新方法:

void MainWindow::RefreshInfoSection()
{
    uint64_t space;

    NbOfFolderLabel = new QLabel(tr("%1 Files").arg(m_device.getNbOfFolder()));
    NbOfFilesLabel = new QLabel(tr("%1 Files").arg(m_device.getNbOfFiles()));

    space = m_device.getAvailableFreeSpaceInBytes();

    if(space < MEGABYTE)
        SpaceAvailLabel = new QLabel(tr("%1 KB Available").arg(space/KILOBYTE));
    else if (space < GIGABYTE)
        SpaceAvailLabel = new QLabel(tr("%1 MB Available").arg(space/MEGABYTE));
    else
        SpaceAvailLabel = new QLabel(tr("%1 GB Available").arg(space/GIGABYTE));

    NbOfFolderLabel->update();
    NbOfFilesLabel->update();
    SpaceAvailLabel->update();
    CreateInfoLayout->update();
}

但即使更新了 3 个标签,它也永远不会起作用。

有什么想法吗?

【问题讨论】:

  • 我认为您不应该再次新建标签,而是应该能够执行类似 NbOfFolderLabel->setText(...); 之类的操作意味着让他们成为你班级的成员。
  • @seb 你能看到 RefreshInfoSection() 之后的 NbOfFolderLabel 和其他标签文本吗??

标签: c++ qt


【解决方案1】:

使用 QLabel->update() 很好,但您还应该运行 'processEvents()' 来强制执行这些更新。你可以运行qApp-&gt;processEvents(); 或向它发出信号吗?

QT Repaint/Redraw/Update/Do Something!,也许看看http://wiki.qt.io/Progress-bar

我也是,我目前只是在学习这个,所以我可能会犯错误,但请告诉我进展如何?

祝你好运!

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 2014-12-05
    • 2017-10-22
    • 1970-01-01
    • 2012-06-21
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多