Qt实现界面关闭按钮隐藏和状态保存

本文介绍如何在Qt中实现点击关闭按钮隐藏界面,并在再次进入该页面时,页面上的内容保持为上次更改的状态。

1. 隐藏界面而不是关闭

重写closeEvent函数,将窗口隐藏而不是关闭:

void Lights::closeEvent(QCloseEvent *event)
{
    // 隐藏窗口而不是关闭
    hide();
    event->ignore();
}

2. 保存和加载状态

  • closeEvent函数中保存当前状态到数据库。
  • showEvent函数中加载上次保存的状态。

2.1 定义保存和加载状态的函数

class Lights : public QWidget
{
    // ...

public slots:
    // ...
    void loadLastStatus(); // 加载上次更改的状态
    void saveLastStatus(); // 保存当前更改的状态

private:
    // ...
    int getLastBrightness(int userid); // 获取数据库中的上次亮度
    void updateLastBrightness(int userid, int brightness); // 更新数据库中的上次亮度
};

2.2 实现保存和加载状态的函数

void Lights::loadLastStatus()
{
    // 加载上次更改的状态
    // 根据userid从数据库中获取上次更改的状态,并根据状态更新界面

    int brightness = getLastBrightness(userid);
    if (brightness > 0)
    {
        ui->SwitchStatus->setChecked(true);
        ui->ctrlform->setValue(brightness);
    }
    else
    {
        ui->SwitchStatus->setChecked(false);
        ui->ctrlform->setValue(0);
    }
}

void Lights::saveLastStatus()
{
    // 保存当前更改的状态
    // 将当前更改的状态保存到数据库中
    int brightness = ui->ctrlform->getValue();
    updateLastBrightness(userid, brightness);
}

int Lights::getLastBrightness(int userid)
{
    // 获取数据库中的上次亮度
    Sqlite::sqlite_init();
    QString queryStr = QString('SELECT value FROM Status WHERE uid = %1 AND device_name = \'智能灯\'').arg(userid);
    QSqlQuery query;
    if (query.exec(queryStr) && query.next())
    {
        return query.value(0).toInt();
    }
    else
    {
        qDebug() << '得到上一次亮度错误: ' << query.lastError().text();
        return 0;
    }
}

void Lights::updateLastBrightness(int userid, int brightness)
{
    // 更新数据库中的上次亮度
    Sqlite::sqlite_init();
    QString queryStr = QString('UPDATE Status SET value = %1 WHERE uid = %2 AND device_name = \'智能灯\'').arg(brightness).arg(userid);
    QSqlQuery query;
    if (!query.exec(queryStr))
    {
        qDebug() << '更新亮度失败: ' << query.lastError().text();
    }
}

3. 调用保存和加载状态的函数

  • closeEvent函数中调用saveLastStatus()保存状态。
  • showEvent函数中调用loadLastStatus()加载状态。
void Lights::showEvent(QShowEvent *event)
{
    // 当页面显示时,加载上次更改的状态
    loadLastStatus();
    event->accept();
}

void Lights::closeEvent(QCloseEvent *event)
{
    // ...
    saveLastStatus(); // 保存当前状态
}

总结

通过以上步骤,即可实现Qt界面点击关闭按钮隐藏,并在再次进入该页面时加载上次保存的状态。

Qt实现界面关闭按钮隐藏和状态保存

原文地址: http://www.cveoy.top/t/topic/fAPt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录