2

次のコードでは、メソッドexec(const char *cmd)は bash スクリプトを実行し、出力を文字列のベクトルとして返します。目的は、これらの文字列のそれぞれから を作成し、作成した小さな GUI にQListWidgetItem追加することですが、 が正常に作成されません。aまたはを作成するには常に a を使用する必要があるようですが、文字列変数を使用して作成することはできません。QListWidgetQListWidgetItemconst char*QStringQListWidgetItem

行で何をしようとしているのかを見ることができます: QString nextLine = txtVcr.back(); There is an exception throw here, it wants QStringset to a const char*, たとえば QString nextLine = "Hello, World!";

ベクトルから文字列を取得QListWidgetItemsし、それらから作成して my に追加するにはどうすればよいQListWidgetですか?

C# では、任意のコンテナー/ウィジェットに文字列などを追加できるという点で、すべてがかなり直接的でした。これらの「QWidgets」で見落としている中間ステップはありますか? おそらく、「Q」タイプにキャストする必要がありますか?

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    vector<string> exec(const char *cmd);
    vector<string> txtVcr = exec("/home/rhurac/getServices.sh");

    while (!txtVcr.empty())
    {
        QString nextLine = txtVcr.back();
        ui->uxListWidget->addItem(new QListWidgetItem(nextLine, ui->uxListWidget));
        txtVcr.pop_back();
    }
}
4

2 に答える 2

2

QListWidgets やその他の QxyzWidget クラスは使用しないでください。それらは廃止され、古いコード (基本的に Qt3) との互換性のために Qt に残されています。

ユースケースには QListView と QStringListModel を使用してください。例えば

QListView *lv = new QListView();
QStringListModel m;
QStringList data = QStringList()<<"AAA"<<"BBB"<<"CCC";
m.setStringList(data);
lv->setModel(&m);
lv->show();

PS: 申し訳ありませんが、あなたの質問に直接答えるものではありません。ただし、レガシー コードをサポートする必要がない限り、QListWidgets には触れないでください。

于 2015-08-19T10:55:59.930 に答える