Qt组合框和相关标签

问题描述 投票:0回答:1

我有一个带有2列的data.csv文件。第一列包含一些国家名称,第二列包含每个国家的首都。在我的用户界面中,有一个包含国家名称的组合框,旁边有一个标签。我想要的是从组合框和标签中选择一个国家,以显示所选国家的首都。到目前为止,我尝试过的是]

QFile datafile("path to data.csv");
if(datafile.open (QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream line(&datafile);
        while (!line.atEnd()){
          QString linetext=line.readLine(); // reads line from file
          const QStringList fields { linetext.split(',') };
          const QString Country { fields[0] };
          const QString Capital { fields[1] };
          ui->combobox->additem(Country);

          //add code here (or outside of while?) to show capital next to combobox

     }
}

enter image description here

I,当显示大写字母的代码在里面时,它打印表的最后一行。当我将其放置在外面时,则无法识别fields。有没有办法使文件全局可用?有没有更简单的方法?

EDIT 12/5/2020

这是问题的第一部分,我通过使用thibsc的答案将其解决。我想进一步发展该项目。

让我们说说comboBox包含两个国家,分别是“希腊”和“意大利”,因此首都城市是“雅典”和“罗马”。我还有2个csv文件,每个文件包含每个首都的著名景点,并且该文件以城市名称命名。这将是Athens.csvRome.csv

因此,选择一个国家后,标签将在其旁边显示首都。我想使用城市名称来调用相应的csv文件,并在第二个组合框中显示旅游景点的列表。如图所示,每个文件的第一列包含景点。第二列是可选的。

enter image description here

问题是,当我从第一个组合框中选择一个国家时,第二个组合框不会加载文件,这是因为无论何时我从第一个组合框中更改县,然后第二个组合都会从先前的选择中加载旅游景点] >

enter image description here

完整代码在这里

#include "mapproject.h"
#include "ui_mapproject.h"
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QComboBox>
#include <QList>

MapProject::MapProject(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MapProject)
{
    ui->setupUi(this);
    QFile datafile("/home/spyros/untitled/data.csv");
    if(datafile.open (QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream line(&datafile);
            while (!line.atEnd()){
              QString linetext=line.readLine(); // reads line from file
              const QStringList fields = linetext.split(',');
              ui->comboBox->addItem(fields.first(), QVariant(fields.last()));
         }
    }connect(ui->comboBox, &QComboBox::currentTextChanged, [this](){
        ui->label->setText(ui->comboBox->currentData().toString());
    });
    ui->comboBox_2->setEnabled(false);
    ui->comboBox->setCurrentIndex(-1);
}

MapProject::~MapProject()
{
    delete ui;
}


void MapProject::on_comboBox_currentIndexChanged(const QString &arg1)
{
    ui->comboBox_2->setEnabled(true);
    QString City = ui->label->text();
    QFile cityfile("/home/spyros/untitled/"+City+".csv");
    if(cityfile.open (QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream line(&cityfile);
            while (!line.atEnd()){
              QString linetext=line.readLine(); // reads line from file
              const QStringList fields = linetext.split(',');
              ui->comboBox_2->addItem(fields.first(), QVariant(fields.last()));
         }
    }
}

我有一个包含2列的data.csv文件。第一列包含一些国家名称,第二列包含每个国家的首都。在我的用户界面中,有一个组合框,其中包含...

c++ qt csv user-interface combobox
1个回答
1
投票

您有2个字段,第一个是国家/地区,第二个是首都,所以我认为最好的方法是使用QComboBoxQComboBox::currentData项目中同时进行映射:

© www.soinside.com 2019 - 2024. All rights reserved.