【发布时间】:2015-07-22 11:38:29
【问题描述】:
这是我的类定义/.hpp 文件的一部分:
class RenderGraphFrame : public QGLWidget
{
public:
RenderGraphFrame(QWidget *parent);
private slots:
void PrevButton();
void NextButton();
private:
void draw();
QWidget *p_parent;
bool ButtonsInited;
QPushButton *nextButton;
QPushButton *prevButton;
}
这是相关的源代码部分:
RenderGraphFrame::RenderGraphFrame(QWidget *parent)
: QGLWidget(QGLFormat(/*QGL::SampleBuffers*/), parent)
{
p_parent = parent;
/* ... */
}
void RenderGraphFrame::draw()
{
if (ButtonsInited == false)
{
bool tmpttest_success;
nextButton = parent->findChild<QPushButton *>("nextButton", Qt::FindChildrenRecursively);
prevButton = p_parent->findChild<QPushButton *>("prevButton", Qt::FindChildrenRecursively);
tmpttest_success = connect(_nextButton, SIGNAL (released()), this, SLOT(NextButton()));
if (tmptest_success == false)
{
//this is what happens but I don't want it to happen...
}
}
/*....*/
}
void RenderGraphFrame::NextButton()
{
/*somestuff*/
return;
}
void RenderGraphFrame::PrevButton()
{
/*somestuff*/
return;
}
我得到了错误:
QObject::connect: No such slot QGLWidget::NextButton() in ..\Graph\some\path\to.cpp:160
QObject::connect: (sender name: 'nextButton')
当然没有,因为我不想连接QGLWidget::NextButton(),因为我想连接RenderGraphFrame::NextButton()。
我该如何解决这个问题?我已经锁定了所有关于“没有这样的插槽”qt 错误的帖子。但它们似乎完全是由我以外的其他问题引起的。
那么有什么建议可以解决这个问题吗?
【问题讨论】:
-
您忘记将
Q_OBJECT添加到您的RenderGraphFrame课程中。完成后运行 qmake。 -
嗯.... 修复了它。从来没有听说过(但我是qt的新手)。使用 QT 时是否有任何类必须包含它?
-
不是任何类,但如果你使用特定的 Qt 特性,比如 slot 或 QVariant,你必须添加它
-
@Viktor 这是误导。
QVariant不在任何地方输入图片。这真的很简单:任何从QObject派生的类都必须在类定义的第一行包含Q_OBJECT宏。 没什么。字面意思就是这么简单。围绕这个简单主题的困惑令人难以置信。