Создание сигналов и слотов QT4 GUI Builder

Привет, я новичок в C ++ и пытаюсь разобраться в концепциях.
Я создаю очень простое приложение, чтобы начать работу с помощью обучающих программ, поэтому я пытаюсь сделать свою собственную первую попытку.
У меня проблемы с file.h и file.cpp, кроме main.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));
}

Я пытаюсь быть настолько простым, насколько это возможно, просто чтобы он заработал, он скомпилируется, но я не могу получить сигналы и слоты для разговора, где я ошибаюсь …. помните совершенно новый.

0

Решение

Вы должны подключить свои слоты к сигналам, добавьте это в свой конструктор:

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 к тому, что ты назвал своим.

1

Другие решения

Хорошо, вы должны подключить сигнал к слоту где-нибудь. Вы должны сделать это на конструкторе,

connect (кнопка, SIGNAL (clicked ()), это, SLOT (on_buttonbox_buttonClicked (QAbstractButton *)));

Просто помните, что слот будет вызываться только при наличии сигнала подключения к нему. В противном случае ваша кнопка не сможет знать, куда идти.

0

Механизм SIGNAL и SLOT очень прост и используется для регистрации виджета (кнопок, spinbox и т. Д.) На событие. Например, «когда я нажму эту кнопку, появится новое окно». При этом давайте посмотрим, как мы можем зарегистрировать наш СЛОТ (что делать после получения сигнала) на его СИГНАЛ (событие: щелчок, выбор, редактирование формы и т.д ..)

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

кнопка это виджет, который будет генерировать сигнал

СИГНАЛ (нажмите ()) Вы говорите, что нажав (нажмите и отпустите) кнопка действие будет выполнено

этот это объект, который объявляет слот

SLOT (openWindow ()) метод (слот) будет называться щелчком кнопка

Сигналы и слоты должны иметь одинаковые параметры!
Поэтому, чтобы ответить на ваш вопрос, вы должны объявить слот с теми же параметрами, что и сигнал. click() не имеет параметров, поэтому вы должны объявить свой слот как:

    void on_buttonbox_buttonClicked ()

PS: насколько я помню есть проблема с именованием слота с префиксом на. Но мне нужно немного поискать, потому что я не очень хорошо помню.

Обновить: Я сделал небольшой тест и назвал слот с префиксом на_ выдает сообщение об ошибке во время выполнения QMetaObject::connectSlotsByName: No matching signal for on_ClickChangeBack() но слот выполнить.

0
По вопросам рекламы [email protected]