Привет, я новичок в 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));
}
Я пытаюсь быть настолько простым, насколько это возможно, просто чтобы он заработал, он скомпилируется, но я не могу получить сигналы и слоты для разговора, где я ошибаюсь …. помните совершенно новый.
Вы должны подключить свои слоты к сигналам, добавьте это в свой конструктор:
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
к тому, что ты назвал своим.
Хорошо, вы должны подключить сигнал к слоту где-нибудь. Вы должны сделать это на конструкторе,
connect (кнопка, SIGNAL (clicked ()), это, SLOT (on_buttonbox_buttonClicked (QAbstractButton *)));
Просто помните, что слот будет вызываться только при наличии сигнала подключения к нему. В противном случае ваша кнопка не сможет знать, куда идти.
Механизм 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()
но слот выполнить.