在函数 Qt C++ 中使用 UI 数组

Posted

技术标签:

【中文标题】在函数 Qt C++ 中使用 UI 数组【英文标题】:Use UI array in a function Qt C++ 【发布时间】:2012-11-12 19:39:07 【问题描述】:

在我的 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();

【问题讨论】:

【参考方案1】:

void getData(ui)

该行开始定义getData 函数,它接受一个变量,type ui 并且没有名称(因此无法在函数代码中访问它)。

添加类型...

void getData(MainWindow::Ui *ui)

【讨论】:

【参考方案2】:

使getData() 成为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();

然后,在你的构造函数中:

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

我推荐这种方法,因为ui 包含私有成员,所以最好有一个成员函数来修改它。

不要忘记在 MainWindow 类的头文件中声明 getData()。您可能应该将其设为私有。

顺便说一句,ui 不是数组。这是一个对象指针。

【讨论】:

以上是关于在函数 Qt C++ 中使用 UI 数组的主要内容,如果未能解决你的问题,请参考以下文章

Qt能调用C语言函数吗

在qt c++中获取Json数组中Qstring的输出

qt 关于信号槽传递的参数问题

大侠急救:qt creator中怎么定义数组,然后用qlabel将数组内容显示出来,比如一个工程的ui中有10个label,

QT怎样将一个结构体作为函数参数从C++传递到QML

C++ Qt 无法正确解析 JSON 数组