Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mk_137 en 30 Junio 2010, 15:57 pm



Título: Llamar Accion con Connect en QT
Publicado por: mk_137 en 30 Junio 2010, 15:57 pm
He estado intentando llamar una accion mediante un boton y un connect, pero no hay manera, no se como quitar el error:
Object::connect: No such slot MainWindow::show_text() in ..\prueba2\mainwindow.cpp:20

Los que ya hay definidos como clear(), close() funcionan perfectamente, pero si es una funcion hecha por mi me dice el error indicado.

Este es el mainwindow.cpp :

Código:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

void MainWindow::show_text()
{
       ui->textBrowser->setTextBackgroundColor(QColor(255,100,100,255));
       ui->textBrowser->setText("hola");
}

void MainWindow::prepare_buttons()
{
    this->connect(ui->clearButton,SIGNAL(clicked()),ui->textBrowser,SLOT(clear()));
    this->connect(ui->startButton,SIGNAL(clicked()),this,SLOT(show_text()));
}

MainWindow::~MainWindow()
{
    delete ui;
}


Título: Re: Llamar Accion con Connect en QT
Publicado por: [L]ord [R]NA en 30 Junio 2010, 17:26 pm
Si muestras el MainWindow.h podria ayudarte... quiero ver si declaraste show_text() como un private slot.


Título: Re: Llamar Accion con Connect en QT
Publicado por: mk_137 en 30 Junio 2010, 17:34 pm
Si muestras el MainWindow.h podria ayudarte... quiero ver si declaraste show_text() como un private slot.
aaaa... pues no tenia ni idea que se devia declarar de algun modo especial, pensava que podia llamar a una funcion cualquiera.
Ahora busco lo que me has comentado, te pego el MainWindow.h

Código:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    void show_text();
    void prepare_buttons();
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

Lh: No hagas doble post!

Muchas gracias Lord.RNA, no sabia que existia esto.

Al final me ha quedado asi y funciona.

Código:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    void prepare_buttons();
    ~MainWindow();

public slots:
    void show_text();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H