0

私の Windows フォーム コードでは、デフォルトで ui を使用してグラフィカル要素を定義しています。しかし、次のように関数でそれらを変更したい:

問題は、デバッグ ツールが ui がこのスコープで宣言されていないことを教えてくれることです。

#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "datawindow.h"

void getData(ui){
    QFile inputFile("C:\\pepoles.txt");
        if (inputFile.open(QIODevice::ReadOnly)){
           QTextStream in(&inputFile);



           while ( !in.atEnd() ){
              QString line = in.readLine();
              ui->listWidgetData->addItem(line);
           }
        }
        else{
            QMessageBox::critical(this, "Erreur", "Une erreur s'est produite :(");
        }
    inputFile.close();
}

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

}

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

void MainWindow::on_actionNouvellesDonnees_triggered() {
    w.show();
}
4

2 に答える 2

1

void getData(ui){

その行は関数の定義を開始しgetDataます。これは 1 つの変数を取り、 uiと名前はありません (したがって、関数コードではアクセスできません)。

タイプを追加...

void getData(MainWindow::Ui *ui){
于 2012-11-12T19:45:15.880 に答える
1

MainWindowgetData()のメンバーを作成します。

void MainWindow::getData()
{
    QFile inputFile("C:\\pepoles.txt");
    if (inputFile.open(QIODevice::ReadOnly)) {
        QTextStream in(&inputFile);
        while ( !in.atEnd() ) {
            QString line = in.readLine();
            ui->listWidgetData->addItem(line);
        }
    } else {
        QMessageBox::critical(this, "Erreur", "Une erreur s'est produite :(");
    }
    inputFile.close();
}

次に、コンストラクターで次のようにします。

ui->setupUi(this);
getData();

プライベートメンバーが含まれているため、このアプローチをお勧めしuiます。メンバー関数で変更することをお勧めします。

getData()MainWindow クラスのヘッダー ファイルで宣言することを忘れないでください。おそらく非公開にする必要があります。

ところで、ui配列ではありません。オブジェクトポインタです。

于 2012-11-12T19:43:40.093 に答える