我需要将一个QPushButton(startListeningPushButton)从我的StartWindow连接到我的MainController中的一个插槽。我还有几个问题:
我应该指针Ui::startWidget ui
,因为默认情况下Qt将其创建为普通变量吗?
getStartWindow()
是从StartWindow
获取ViewController
的正确方法吗?
从startListeningPushButton
获取StartWindow
的正确方法是什么(我的选择权是正确的)?
这是我的代码:
MainController.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
答案 0 :(得分:1)
目前还不清楚你是否有,然后你的问题是什么。
我怀疑唯一可行的是您调用connect
的第一个参数:
m_viewController.getStartWindow()->getStartListeningPushButton
实际应该是m_viewController.getStartWindow()->getStartListeningPushButton()
(要调用该函数,以便获得指向期望QPushButton
的指针并将其传递给connect
函数。 / p>
在connect
函数中:
QObject*
类型。所以这可以是this
指针(如果当前类是从QObject
派生的),或者类型为QObject*
(ui->fStartListeningPushButton
)的任何类属性,或者是函数调用返回{{ 1}}(QObject*
)。但m_viewController.getStartWindow()->getStartListeningPushButton()
(没有m_viewController.getStartWindow()->getStartListeningPushButton
)在这里没有意义。)()
(使用signal
关键字在头文件类中声明。您不需要在此处实现任何代码,您只需声明信号并且Qt MOC机制实现它默默)。此参数的有效语法为signals:
或&QPushButton::clicked
(Qt4语法,在Qt5中仍然有效)。SIGNAL(clicked())
(使用slot
关键字在头文件类中声明,并由您实现)。此参数的有效语法为slots:
或&MainController::bla
(Qt4语法,在Qt5中仍然有效)。答案 1 :(得分:1)
如果你正在使用Qt Designer和Qt IDE生成这样的代码,它的对象不是指针,我不认为你应该把它作为指针。
是的,返回指向QWidget的指针(在你的情况下是StartWindow)是可以的。
好像你的连接中有错误类型,它应该是这样的:
QObject::connect(m_viewController.getStartWindow()->getStartListeningPushButton(), SIGNAL(clicked()),
this, SLOT(bla()));