crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> сигналы слоты __ запутался
__ilya__
  опции профиля:
сообщение 22.6.2012, 18:22
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

Спасибо сказали: 0 раз(а)




Репутация:   0  


есть два класса TextEdit and PushBox объект последнего находится в первом.
в классе PushBox есть кнопка del, при ее нажатии в классе TextEdit должен вызыватся слот clear(). НО не фига не получается.
Qt запутанная какаято не как не вкурю вот код подскажите как надо

#include <QtGui/QApplication>
#include "textedit.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TextEdit w;

    w.resize(400, 600);
    w.show();
    
    return a.exec();
}




#ifndef TEXTEDIT_H
#define TEXTEDIT_H

#include <QtGui/QWidget>
#include <QtGui>

class PushBox:public QWidget
{
    Q_OBJECT

protected:
    QPushButton *p1;
    QPushButton *del;
    QPushButton *quit;
    QHBoxLayout *pH;

public:
    PushBox(QWidget *p = 0);
};

class TextEdit : public QWidget
{
    Q_OBJECT
    
public:
    TextEdit(QWidget *parent = 0);
    //~TextEdit();
private:
    QVBoxLayout *pV; // = new QVBoxLayout;  ERROR
    QLabel      *plbl;
    QTextEdit   *pte;
    PushBox     *pPB;
};

#endif // TEXTEDIT_H



#include "textedit.h"

TextEdit::TextEdit(QWidget *parent)
    : QWidget(parent)
{
    plbl = new QLabel("       TEXT EDIT");
    pte = new QTextEdit;
    pPB = new PushBox;

    //connect(PushBox::quit, SIGNAL(clicked()), pte, SLOT(clear()));

    //SetLayout
    pV = new QVBoxLayout;
    pV->addWidget(plbl);
    pV->addWidget(pte);
    pV->addWidget(pPB);
    this->setLayout(pV);
}

/*TextEdit::~TextEdit()
{
    
}*/
PushBox::PushBox(QWidget *p)
{
    p1 = new QPushButton("1");
    del = new QPushButton("Delete");
    quit = new QPushButton("Quit");

    connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
    connect(del, SIGNAL(clicked()), TextEdit::pte, SLOT(clear()));

    // Layout
    pH = new QHBoxLayout;
    pH->addWidget(p1);
    pH->addWidget(del);
    pH->addWidget(quit);
    this->setLayout(pH);
}


я уже и так и эдак пробовал.
я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ilyabvt
  опции профиля:
сообщение 23.6.2012, 12:54
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
connect(del, SIGNAL(clicked()), TextEdit::pte, SLOT(clear()));

pte не статический член, надо передать в PushBox указатель pte и тогда вы сможете провести connect.
Цитата
обмен данными в глобальном пространстве?

Нет.
Цитата
я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить???

В данном случае необязательно, хотя это конечно избавило бы от необходимости передавать pte. Сделать очень просто:
в классе:
class PushBox:public QWidget
{
    Q_OBJECT
...
...
...
signals:
    void OwnSignal();
};

в коде:
emit OwnSignal(); //вызов сигнала
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 12:40