#include "menu.h" #include "ui_menu.h" #include "mainwindow.h" #include "QMessageBox" #include "QDebug" #include <QFile> #include <QTextStream> menu::menu(QWidget *parent) : QMainWindow(parent), ui(new Ui::menu) { ui->setupUi(this); // 读取存储库存值的文件,如果不存在则创建一个新文件,并将库存值初始化为114 QFile file("inventory.txt"); if (file.exists()) { if (file.open(QFile::ReadOnly)) { QTextStream stream(&file); QString inventory_str = stream.readAll(); int inventory = inventory_str.toInt(); ui->label_3->setText("库存:" + QString::number(inventory)); file.close(); } } else { if (file.open(QFile::WriteOnly)) { QTextStream stream(&file); stream << "114"; file.close(); } ui->label_3->setText("库存:114"); } } menu::~menu() { delete ui; } void menu::on_spinBox_valueChanged(int value) { // 更新库存值并将其写回文件中 int inventory = 114; inventory -= value; QFile file("inventory.txt"); if (file.open(QFile::WriteOnly)) { QTextStream stream(&file); stream << QString::number(inventory); file.close(); } ui->label_3->setText("库存:" + QString::number(inventory)); if (ui->spinBox->value() >= 114) { QMessageBox::information(this, "嘿", "你居然全要了!"); } }这段代码已经没什么问题了,但是下一次打开窗口时,label_3又会从114开始倒计数,如何解决?(注意,需要时可以删改代码)
时间: 2024-01-19 07:03:02 浏览: 76
为了保证 label_3 在下一次打开窗口时仍然从上一次的倒计数结束的位置开始,你可以将 label_3 的当前倒计数值存储在一个文件中,下一次打开窗口时从文件中读取该值,并将其作为初始值进行倒计数。具体实现方法如下:
1. 在倒计时结束的地方,将 label_3 的当前倒计数值存储在一个文件中:
```cpp
QFile file("count.txt");
if (file.open(QFile::WriteOnly | QFile::Truncate)) {
QTextStream out(&file);
out << ui->label_3->text();
file.close();
}
```
2. 在打开窗口时,读取文件中的倒计数值,并将其作为初始值进行倒计数:
```cpp
QFile file("count.txt");
if (file.exists()) {
if (file.open(QFile::ReadOnly)) {
QTextStream in(&file);
QString count_str = in.readAll();
int count = count_str.toInt();
file.close();
ui->label_3->setText(QString::number(count));
while (count > 0) {
QThread::sleep(1);
count--;
ui->label_3->setText(QString::number(count));
}
}
} else {
ui->label_3->setText("114");
}
```
这样,即使关闭窗口,下一次打开时也能从上一次结束的位置开始倒计数。需要注意的是,倒计时过程中不能阻塞主线程,否则界面会出现卡顿现象,因此需要使用 QThread::sleep() 函数来让线程休眠一段时间。
阅读全文