Use UI array in a function Qt C++

2019-09-07 14:51发布

In my Windows forms code, ui is used to define graphical element by default. But I want to modify them in a function, like this:

The problems is that the debug tool tells me that ui is not declared in this scope.

#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();
}

2条回答
The star\"
2楼-- · 2019-09-07 15:11

Make getData() a member of MainWindow:

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();
}

Then, in your constructor:

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

I recommend this approach since ui contains private members, so it's best to have a member function modify it.

Don't forget to declare getData() in the header file of your MainWindow class. You should probably make it private.

And btw, ui is not an array. It's an object pointer.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-09-07 15:38

void getData(ui){

That line starts definition of getData function, which takes one variable, with type ui and no name (so it can't be accessed in the function code).

Add type...

void getData(MainWindow::Ui *ui){
查看更多
登录 后发表回答