需要先检查程序异常退出的具体错误信息,可能是因为文件读写失败或者表格操作不当等原因导致。
可以尝试在程序中加入一些调试信息,比如输出一些信息或者捕获异常,来帮助定位问题所在。另外,也可以使用Qt自带的调试工具进行排错。
以下是对该段代码的一些建议修改:
建议将文件读写和表格操作分开处理,减少函数复杂度。
在打开历史记录文件时,应当先判断文件是否存在。如果不存在,则需要创建一个新的文件。
在添加数据到表格中时,可以使用批量操作,提高效率。
建议将QTableWidget对象设置为类成员变量,以便于其他函数操作。
可以考虑增加一些界面交互提示,比如弹出错误窗口或者状态栏提示。
部分代码中的硬编码路径应当改为动态获取或者使用配置文件等方式管理。
修改后的代码如下所示:
void videoplayer::on_pushButton_history_clicked() {
QString recordPath = "/path/to/record.txt"; // 历史记录文件路径
// 判断历史记录文件是否存在,不存在则创建一个新的文件
if (!QFile::exists(recordPath)) {
QFile file(recordPath);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
file.close();
}
}
// 读取历史记录
QStringList records;
QFile file(recordPath);
if (file.open(QIODevice::ReadOnly)) {
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
QString imagePath = line.trimmed();
records << imagePath;
}
file.close();
}
// 打开编辑窗口
bool ok;
QString newName = QInputDialog::getText(this, "编辑历史记录",
"请输入新名称:", QLineEdit::Normal,
records[0], &ok);
if (ok && !newName.isEmpty()) {
records[0] = newName;
// 将修改后的历史记录写入文件
QFile file(recordPath);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
QTextStream out(&file);
for (const QString& record : records) {
out << record << "\n";
}
file.close();
}
// 初始化QTableWidget窗口
m_tableWidget = new QTableWidget(records.size(), 1, this);
m_tableWidget->setWindowTitle("历史记录");
m_tableWidget->setHorizontalHeaderLabels(QStringList() << "路径");
// 添加数据到表格中
QVector<QTableWidgetItem*> items;
for (const QString& record : records) {
QTableWidgetItem* item = new QTableWidgetItem(record);
items.push_back(item);
}
m_tableWidget->setVerticalHeaderLabels(QStringList());
m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
m_tableWidget->setColumnWidth(0, 400);
m_tableWidget->setRowCount(records.size());
m_tableWidget->setItems(0, 0, items);
// 显示窗口
m_tableWidget->show();
}
}