[英]Creating signals and slots qt4 gui builder
您好,我是C ++的新手,并试图让我了解这些概念。 我正在创建一个非常简单的应用程序,以借助教程进行操作,因此,我尝试自己尝试一下。 我在使用main.cpp之外的file.h和file.cpp时遇到问题,我想单击按钮框中的按钮“确定”,并在文本框中显示文本。 这是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));
}
我试图尽可能简单地做到这一点,它将进行编译,但我无法获得进行通话的信号和插槽,我在哪里错了...。记住全新的内容。
您必须将插槽连接到信号,然后将其添加到构造函数中:
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
编辑:
MainWindow.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
更改为您命名的任何yourButton
。
好了,您必须将信号连接到某个位置的插槽。 您应该在构造函数上执行此操作
connect(button,SIGNAL(clicked()),this,SLOT(on_buttonbox_buttonClicked(QAbstractButton *)));
请记住,仅当有信号连接到插槽时才会调用该插槽。 否则,您的按钮将不知道要去哪里。
SIGNAL和SLOT的机制非常简单,用于向事件注册小部件(按钮,旋转框等)。 例如,“当我单击该按钮时,将显示一个新窗口。” 话虽这么说,让我们看看如何将SLOT(收到信号后的操作)注册到他的SIGNAL(事件:单击,选择,编辑表单等。)
QObject::connect( button , SIGNAL( click()), this , SLOT( openWindow() ))
button是将引发信号的小部件。
SIGNAL(click())告诉您单击(按下并释放) 按钮将执行某项操作
这是声明插槽的对象
SLOT(openWindow())是方法(插槽),将称为单击按钮
信号和插槽必须具有相同的参数!! 因此,要回答您的问题,您必须声明一个与信号具有相同参数的插槽。 click()
没有参数,因此您必须将广告位声明为:
void on_buttonbox_buttonClicked ()
PS:我记得有一个问题命名与前缀插槽。 但是我必须做一点搜索,因为我不太记得。
更新:我进行了一些测试,并使用前缀on_命名插槽,在运行时给出了错误消息QMetaObject::connectSlotsByName: No matching signal for on_ClickChangeBack()
但插槽执行了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.