创建信号和插槽qt4gui生成器
Creating signals and slots qt4 gui builder
嗨,我是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()
发出错误消息,但插槽执行。
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 从Q_INVOKABLE功能或插槽中更改QQuick图像源
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- NS3 插槽混淆(需要帮助理解)
- QObject::连接无法将信号连接到*this*对象的插槽
- QT 插槽未在主线程上调用
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt插槽调用了两次
- C++Qt信号和插槽
- 从插槽调用 QApplication::p rocessEvents 会导致再次调用同一插槽
- 创建信号和插槽qt4gui生成器