首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT连接到按钮不起作用

QT连接到按钮不起作用
EN

Stack Overflow用户
提问于 2017-04-23 11:33:20
回答 4查看 4.8K关注 0票数 0

我在QT中尝试了一个非常简单的程序。我在QT designer中用一个按钮创建了一个对话框。我想要有程序,当我点击按钮时,我会得到消息框。我调试了这个程序。但是,点击按钮后,信号不会出现在功能OnClickedPushButton(bool)上。哪里出错了?我的代码如下所示:

代码语言:javascript
复制
#include "qttest.h"
#include <QtGui>
#include <QMessageBox>

QTTest::QTTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(OnClickedPushButton()));

    QPushButton *button = new QPushButton(this);
    button->setText("ClcikMe");
    button->setGeometry(QRect(QPoint(150, 50), QSize(85, 25)));
    connect(button, SIGNAL(clicked()), this, SLOT(OnClickedPushButton()));
}

QTTest::~QTTest()
{

}

void QTTest::OnClickedPushButton()
{
    QMessageBox::about(this, "Message", "You pushed button.");
}

我可以构建它,也可以启动它。但是,调试器在构造函数中写入以下消息:

代码语言:javascript
复制
QObject::connect: No such slot QTTest::OnClickedPushButton() in qttest.cpp:9
QObject::connect:  (sender name:   'pushButton')
QObject::connect:  (receiver name: 'QTTestClass')
QObject::connect: No such slot QTTest::OnClickedPushButton() in qttest.cpp:14
QObject::connect:  (receiver name: 'QTTestClass')

我可以在窗口看到两个按钮。pushButton和button。但是,如果我将点击按钮,消息将不会因为错误的插槽映射而出现。你知道怎么做才对吗?

EN

回答 4

Stack Overflow用户

发布于 2017-04-23 19:31:39

这里有两种可能:要么像Avi提到的那样将OnClickedPushButton声明为一个插槽,要么使用new signal/slot connection syntax。使用新语法,您可以将信号连接到任意函数,如下所示:

代码语言:javascript
复制
connect(pushButton, &QPushButton::clicked, this, &QTTest::OnClickedPushButton);

与旧语法相比,它的主要优点是在编译时进行检查,并且不会出现像现在这样的运行时错误。

票数 2
EN

Stack Overflow用户

发布于 2017-04-23 15:40:49

您需要在您的头文件中将'OnClickedPushButton‘声明为插槽。编译器在代码的插槽列表中找不到指定的函数。

票数 1
EN

Stack Overflow用户

发布于 2017-04-23 15:20:41

如果您在创建项目时已经创建了一个主窗口,那么您不必手动创建按钮。您可以使用设计器打开MainWindow,拖放按钮,然后右键单击按钮,选择"Go to slot“选项,这将打开源代码。样本源在这里,

代码语言:javascript
复制
#include "qttest.h"
#include "ui_qttest.h"
#include <QMessageBox>

QTTest::QTTest(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::QTTest)
{
    ui->setupUi(this);
}

QTTest::~QTTest()
{
    delete ui;
}

void QTTest::on_pushButton_clicked()
{
    QMessageBox::about(this, "Message", "You pushed button.");
}

另外,请粘贴您的标题代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43567085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档