Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование Сигналов без Слотов
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Litkevich Yuriy
Делаю маленькую програмульку, из одного файла ради ликбеза, неохота делать отдельный класс, как поюзать сигнал, что нажата кнопка 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
Думаю, что это нельзя сделать, так как вроде должен быть объект отправитель и объект приемщик.
Которые к тому же связаны все с разруливанием в многопоточных приложениях.
ViGOur
Но можно это обойти, сделав некий 'переходник', примерно так:
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
Цитата(ViGOur @ 7.2.2008, 13:02) *
должен быть объект отправитель и объект приемщик

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

Спасибо за шаблончик.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.