如何将操作连接到 C++/Qt 中的值更改
How to connect an action to a value change in C++/Qt
我确实有一个问题。我目前正在开发一个应用程序,此应用程序正在报告设备上的可用空间。
显示是在我的文件mainwindow.cpp
的Window
类中完成
void MainWindow::createInfoSection()
{
uint64_t space;
CreateInfoSection = new QWidget();
CreateInfoSection->setFixedHeight(40);
QGridLayout *CreateInfoLayout = new QGridLayout(CreateInfoSection);
NbOfItemsLabel = 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));
CreateInfoLayout->addWidget(NbOfItemsLabel, 0,0);
CreateInfoLayout->addWidget(SpaceAvailLabel, 0,1);
CreateInfoLayout->setAlignment(Qt::AlignCenter);
}
我有第二种方法可以在需要时更新该部分
void MainWindow::RefreshInfoSection()
{
uint64_t space;
NbOfItemsLabel = 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));
}
可用空间来自我使用 m_device 访问的另一个类中声明的方法。 getAvailableFreeSpaceInBytes
在我的mtp_wrapper
课中定义如下(mtp_wrapper.cpp)
uint64_t mtp_wrapper::getAvailableFreeSpaceInBytes() {
return PulsDeviceMngr->device->storage->FreeSpaceInBytes;
}
PulsDeviceMngr
是一个包含多个元素的结构。
我正在寻找的是一种检测更改/更新FreeSpaceInBytes
值并更新MainWindow
中定义的部分的方法,RefreshInfoSection
到期使用RefreshInfoSection
有办法更新部分并QLabel
。
我很确定可以通过CONNECT/SLOT/SIGNAL
来完成
任何想法/例子。
什么是m_device
?m_device
有责任将变化通知他人。如果可能,将信号ChangeInBytes
添加到m_device
,然后大致使用以下方法将相关方连接到该信号:
connect(SIGNAL(m_device->ChangeInBytes), SLOT(interested_party->slot))
如果无法修改m_device,则可能应该创建一个包装类,以适当的方式检查更改。
您无法监视变量,您需要变量的设置器,按照建议发出信号,或者对变量本身进行某种池化以检测更改,但这可能是矫枉过正。
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Qt Quick-如何仅从c++代码与qml属性交互
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 如何在Qt中取消捕获字符串
- Qt SQLite没有查询或参数计数不匹配
- Qt SQlite无法创建表