c++ - 如何从小部件获取 ui 以便将其连接到另一个类?

标签 c++ qt

我需要将一个 QPushButton (startListeningPushButton) 从我的 StartWindow 连接到我的 MainController 中的一个插槽。我还有几个问题:

  1. 我是否应该创建一个 Ui::startWidget ui 的指针,因为默认情况下 Qt 将它创建为一个普通变量?

  2. getStartWindow() 是从 ViewController 获取 StartWindow 的正确方法吗?

  3. StartWindow 获取 startListeningPushButton 的正确方法是什么(我的 getter 正确吗)?

这是我的代码:

主 Controller .cpp:

MainController::MainController()
{
    connect(m_viewController.getStartWindow()->getStartListeningPushButton, &QPushButton::clicked, this, &MainController::bla)

}

ViewController.cpp:

StartWindow* ViewController::getStartWindow()
{
    return &startWindow;
}

StartWindow.cpp:

QPushButton* StartWindow::getStartListeningPushButton()
{
    return ui->fStartListeningPushButton;
}

StartWindow.h:

#ifndef STARTWINDOW_H
#define STARTWINDOW_H

#include "ui_startwindow.h"

class StartWindow : public QWidget
{
    Q_OBJECT
public:
    StartWindow(QWidget *parent = 0);
    ~StartWindow();
    QPushButton* getStartListeningPushButton();

private:
    Ui::startWidget *ui;
};

#endif // STARTWINDOW_H

最佳答案

  1. 如果您使用的是 Qt Designer 并且 Qt IDE 生成的代码是对象而不是指针,我认为您不应该将其设为指针。

  2. 是的,返回指向 QWidget(在您的情况下为 StartWindow)的指针非常好。

  3. 你的 setter/getter 没问题。

似乎您在连接中输入错误,它应该如下所示:

QObject::connect(m_viewController.getStartWindow()->getStartListeningPushButton(), SIGNAL(clicked()),
                 this, SLOT(bla()));

关于c++ - 如何从小部件获取 ui 以便将其连接到另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533689/

相关文章:

C++ 哈希链接函数

c++ - 带 abs() 的方程给出了错误的答案 (gcc/g++)

linux - 如何将 -std=c++11 添加到我的 Qt Creator 中的编译器选项?

c++ - QXmlSchema 管理包含吗?

c++ - Qt websocket 在进入下一个方法之前发送消息并等待响应

qt - 如何在QT中自定义ListView

C++ tellg() 返回类型

c++ - 空值包扩展是否匹配类型包或可选类型参数?

c++ - 我的自定义命名空间的链接器错误

qt - 如何实现点击TextField外的区域使TextField失去焦点?