创建信号和插槽qt4gui生成器

Creating signals and slots qt4 gui builder

本文关键字:qt4gui 插槽 信号 创建      更新时间:2023-10-16

嗨,我是c++的新手,并试图了解这些概念。我正在创建一个非常简单的应用程序,在教程的帮助下开始,所以我尝试自己的第一次尝试。我的文件.h和file.cpp有问题,除了main.cpp我想点击"ok"按钮框中的按钮,并在文本框中显示文本。这是MainWindow.h的第一个

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "ui_MainWindow.h"
class MainWindow: public QMainWindow, private Ui::MainWindow
{
    Q_OBJECT
public:
    MainWindow(QMainWindow *parent = 0);
private slots:
    //here is where im tyring to add a slot.
    void on_buttonbox_buttonClicked ( QAbstractButton * );
    // void on_inputSpinBox2_valueChanged(int value);
    private:
    Ui::MainWindow ui;
};
#endif

接下来是MainWindow.cpp

#include <QtGui>
#include "MainWindow.h"
MainWindow::MainWindow(QMainWindow *parent)
     : QMainWindow(parent)
{
    ui.setupUi(this);
}
//This is where i would like to catch the clicked signal from the ok button and add the text to the text box.
void MainWindow::on_buttonbox_buttonClicked ( QAbstractButton * ){
    ui.textEdit->setText(QString::number(16));
}

我试着尽可能简单地让它继续运行,它会编译,但我无法获得信号和插槽,我哪里错了。。。。记住全新。

您必须将Slots连接到Signals,将其添加到您的构造函数中:

this->connect(this->ui.yourButton, SIGNAL(clicked()), this, SLOT(on_buttonbox_buttonClicked(QAbstractButton*))); 
//                         ^
//                         |
//             The name of your Button here ...

另请参见此处:http://qt-project.org/doc/qt-4.8/signalsandslots.html


编辑:

主窗口.cpp

MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent)
{
    ui.setupUi(this);
    // Connect Signals-Slots
    this->connect(this->ui.yourButton, SIGNAL(clicked()), this, SLOT(on_buttonbox_buttonClicked(QAbstractButton*))); 
}
// ...

但不要忘记将yourButton更改为您命名的任何内容。

好吧,您必须将信号连接到某个位置的插槽。你应该在构造函数上这样做

connect(按钮,SIGNAL(点击()),this,SLOT(on_buttonbox_buttonClicked(QAbstractButton*));

请记住,只有当有信号连接到插槽时,才会调用该插槽。否则,您的按钮将不知道该去哪里。

SIGNAL和SLOT的机制非常简单,用于将小部件(按钮、spinbox等)注册到事件。例如"当我点击那个按钮时,会出现一个新窗口。"话虽如此,让我们看看如何将我们的SLOT(接收信号后要做什么)注册到他的signal(一个事件:点击、选择、编辑表单等)

QObject::connect( button , SIGNAL( click()), this , SLOT( openWindow() ))

按钮是将抛出信号的小部件。

SIGNAL(点击())您告知点击(按下并释放)按钮将执行操作

是声明插槽的对象

SLOT(openWindow())是单击按钮将调用的方法(插槽)

信号和插槽必须具有相同的参数!!因此,为了回答您的问题,您必须声明一个与信号具有相同参数的插槽。click()没有参数,所以您必须将您的插槽声明为:

    void on_buttonbox_buttonClicked ()

PS:我记得在上用前缀命名插槽时出现了问题。但是我不得不做一些搜索,因为我记不太清楚了。

更新:我做了一个小测试,用前缀on_命名插槽会在运行时QMetaObject::connectSlotsByName: No matching signal for on_ClickChangeBack()发出错误消息,但插槽执行。