Qt 关闭应用程序后保存qlistwidget
我有一个程序,允许用户创建一个配置文件,使用qsettings保存值,用户通过点击qlistwidget中的名称访问他们的配置文件。我试图通过使用文本文件保存配置文件的名称,但一次保存多个配置文件名称时遇到问题。非常感谢。代码如下: 用于将profilename保存到文本文档Qt 关闭应用程序后保存qlistwidget,qt,profile,notepad,qlistwidget,Qt,Profile,Notepad,Qlistwidget,我有一个程序,允许用户创建一个配置文件,使用qsettings保存值,用户通过点击qlistwidget中的名称访问他们的配置文件。我试图通过使用文本文件保存配置文件的名称,但一次保存多个配置文件名称时遇到问题。非常感谢。代码如下: 用于将profilename保存到文本文档 void Profile::writeProfilenames() { QString profilename = ui->lineEdit_profilename->text(); profi
void Profile::writeProfilenames()
{
QString profilename = ui->lineEdit_profilename->text();
profilename = profilename.simplified();
QFile pfile("profilenames.txt");
if (!pfile.open(QFile::WriteOnly | QIODevice::Text))
{
return;
}
QTextStream out(&pfile);
out << profilename;
pfile.flush();
pfile.close();
}
另外,如果你知道一个更好的方法,那么请随意分享!(请举个例子)我不太明白为什么要将名称列表保存在文本文件中,而设置本身是使用
QSettings
以特定于平台的方式保存的
您显示的代码有几个问题:
QSettings
的关键先决条件,最后,使用它们:
struct Profile {
QString name;
int age;
}
void saveProfiles(const QList<Profile> & profiles)
{
QSettings s;
s.beginWriteArray("profiles");
for (int i = 0; i < profiles.size(); ++i) {
s.setArrayIndex(i);
const Profile & p = profiles.at(i);
s.setValue("name", p.name);
s.setValue("age", p.age);
}
s.endArray(); //optional
}
QList<Profile> loadProfiles()
{
QList<Profile> profiles;
QSettings s;
int size = s.beginReadArray("profiles");
for (int i = 0; i < size; ++i) {
s.setArrayIndex(i);
Profile p;
p.name = s.value("name").toString();
p.age = s.value("age").toInt();
profiles << p;
}
s.endArray(); // optional
return profiles;
}
int main(int argc, char ** argv) {
QApplication app(argc, argv);
app.setOrganizationName("fluxD613"); // ideally use setOrganizationDomain instead
app.setApplicationName("fluxer");
...
return app.exec();
}
struct配置文件{
QString名称;
智力年龄;
}
void saveProfiles(const QList和profiles)
{
QSettings;
s、 beginWriteArray(“简介”);
对于(int i=0;i profiles经过更多的研究和反复试验,我想出了以下代码来实现这一点:
当我关闭“配置文件”对话框窗口并使用QCloseEvent
返回主窗口时,将实现此功能
void Profile::writeProfilenames()
{
QFile pfile("profilenames.txt");
if (!pfile.open(QFile::WriteOnly | QIODevice::Text))
{
return;
}
for(int row = 0; row < ui->listWidget_profiles->count(); row++)
{
QListWidgetItem *item = ui->listWidget_profiles->item(row);
QTextStream out(&pfile);
out << item->text().simplified() << "\n";
}
pfile.close();
}
我现在正在努力确保用户不输入已经存在的profilename,并从QListWidget中删除profilename。我在另一个论坛/窗口中实现qsettings,profilename只是“关键字”这将传递给另一个论坛,告诉您要使用什么设置。此代码仍然有效吗?此外,我遇到了以下我难以解决的错误:在saveProfilenames
中,编译器说在“&”标记之前有一个预期的初始值设定项,并且p
未在此范围内声明。如果如果我正确理解了代码,这将创建一个profilename的QList,然后我可以将它添加到listwidget?感谢您的帮助help@fluxD613它是一个引用,是固定的。用户创建的配置文件的实际名称在哪里?例如ui->lineedit->text()@fluxD613由您决定。您可以将它们放入Profile.name
,或Profile.profileName
或其他任何内容。我不知道您想做什么,您必须弄清楚。
void Profile::writeProfilenames()
{
QFile pfile("profilenames.txt");
if (!pfile.open(QFile::WriteOnly | QIODevice::Text))
{
return;
}
for(int row = 0; row < ui->listWidget_profiles->count(); row++)
{
QListWidgetItem *item = ui->listWidget_profiles->item(row);
QTextStream out(&pfile);
out << item->text().simplified() << "\n";
}
pfile.close();
}
void Profile::readProfilenames()
{
QFile pfile("profilenames.txt");
if (!pfile.open(QIODevice::ReadOnly |
QIODevice::Text))
{
return;
}
QTextStream in(&pfile);
while (!in.atEnd())
{
QString line = in.readLine();
QListWidgetItem *item = new QListWidgetItem;
item->setText(line);
ui->listWidget_profiles->addItem(item);
}
pfile.close();
}