Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Использование Сигналов без Слотов

Автор: Litkevich Yuriy 7.2.2008, 8:59

Делаю маленькую програмульку, из одного файла ради ликбеза, неохота делать отдельный класс, как поюзать сигнал, что нажата кнопка btnPath, например чтобы вызвать функцию myfunk.

Например такой код:

void myfunk (void)
{
...
}
//-----------------
int main(int argc, char *argv[])
{
  QPushButton    *btnPath = new QPushButton("Open");
  QVBoxLayout    *layout = new QVBoxLayout;

....

    layout->addWidget(btnPath);

    wgt.setLayout(layout);
    wgt.show();
}

Автор: ViGOur 7.2.2008, 10:02

Думаю, что это нельзя сделать, так как вроде должен быть объект отправитель и объект приемщик.
Которые к тому же связаны все с разруливанием в многопоточных приложениях.

Автор: ViGOur 7.2.2008, 10:25

Но можно это обойти, сделав некий 'переходник', примерно так:

class CTmp: QObject 
{
    Q_OBJECT
public:
    CTmp(QWidget *parent = 0);

public slots:
    void tmpSlot();
};


void myfunk (void)
{
    QMessageBox::warning( 0, "123", "123");
}

CTmp::CTmp( QWidget *parent):QObject( parent)
{
}

void CTmp::tmpSlot()
{
    myfunk();
}

int main(int argc, char *argv[])
{
  QPushButton    *btnPath = new QPushButton("Open");
  QVBoxLayout    *layout = new QVBoxLayout;

....

    CTmp tmp;
    QObject::connect( btnPath, SIGNAL(clicked()), (const QObject *)&tmp, SLOT( tmpSlot()));

    layout->addWidget(btnPath);

    wgt.setLayout(layout);
    wgt.show();
}

Автор: Litkevich Yuriy 7.2.2008, 10:47

Цитата(ViGOur @ 7.2.2008, 13:02) *
должен быть объект отправитель и объект приемщик

Да я именно с этим моментом и соображал сидел, вроде как слоты поддерживаются только классами наследоваными от QObject, и функцию получается просто так не вызвать.
Возьму твой вариант, побалыватся хватит, а потом уже свой класс сделаю.

Спасибо за шаблончик.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)