【问题标题】:Accessing a widget created in a .ui file from code从代码访问在 .ui 文件中创建的小部件
【发布时间】:2021-05-02 11:40:03
【问题描述】:

我正在使用 Qt VS 工具在 Visual Studio 中使用 Qt5.12.10。

我在 Qt Designer 中添加了一个 QTextEdit 小部件,如下图所示。

我还将一个按钮连接到一个名为“slot2()”的自定义插槽,并且我想根据用户在按下“提交”按钮时在 textBox 中键入的内容来编辑文本框中的文本。我用于此任务的代码如下:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication1.h"

class QtWidgetsApplication1 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication1(QWidget *parent = Q_NULLPTR);

public slots:
    void slot1() {
        exit(1);
    };

    void slot2() {
        if (ui.textEdit.toPlainText() == "hello")
            ui.textEdit.setText("hello there!");
        else
            ui->centralWidget->textEdit.setText("sorry, I don't understand :(");
    }

private:
    Ui::QtWidgetsApplication1Class ui;
};

这段代码给了我一个编译错误,说“textEdit”不是 Ui::QtWidgetsApplication1Class 的成员。我也尝试过更改 slot2() 的代码:

    void slot2() {
        if (ui.centralWidget->textEdit.toPlainText() == "hello")
            ui.centralWidget->textEdit.setText("hello there!");
        else
            ui.centralWidget->textEdit.setText("sorry, I don't understand :(");
    }

但这也没有解决问题,说“textEdit 不是 'QWidget' 的成员”。我该怎么办?

【问题讨论】:

    标签: c++ qt signals-slots qt-designer


    【解决方案1】:

    在Qt UI中,“组件代码路径”中不使用布局,你不必写centralWidget

    如果您尝试使用 QtCreator,您将拥有大量的自动完成功能,对您有很大帮助(至少在开始时)

    试着写

    ui.textEdit->setText("HelloWorld");
    

    【讨论】:

    • @emredesu 说:“ui”实际上不是指针,使用ui.textEdit-&gt;setText("foobar"); 是帮助我解决问题的原因。我接受修复,因为它解决了你的问题,但奇怪的是我所有的 ui 界面都是指针(我去年通过了 3 以在 Qt 下开发)。也许是因为我使用 Qt 和 QtCreator
    猜你喜欢
    • 2013-06-26
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多