【发布时间】: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 和其他标签文本吗??