Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pashazz от Июнь 12, 2010, 02:17



Название: Передача сигналов и слотов в функции
Отправлено: pashazz от Июнь 12, 2010, 02:17
Есть некий враппер, между либой и приложением. Враппер - класс, в котором все функции - pure virtual. Класс переопределяется в приложениию

Есть функция:

virtual void showProgressBar (QString title, const char * cancelSlot) = 0;
cancelSlot - слот, который должен быть вызван при нажатии кнопки "Отмена".

Функция реализована в приложении так:

Код
C++ (Qt)
 
void WinegameUi::showProgressBar(QString title, const char *cancelSlot)
{
qDebug() << "Showing progressbar with a slot" << cancelSlot;
progress = new QProgressDialog(0);
connect (progress, SIGNAL(canceled()), this, cancelSlot);
progress->setWindowTitle(title);
progress->setModal (true);
progress->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowMinimizeButtonHint);
progress->show();
}
 
 

Вызывается так:
ui->showProgressBar(tr("Downloading Wine..."), SLOT(cancelCurrentOperation()));

При этом слот объявлен так:
Код:
class corelib : public QObject 
{
Q_OBJECT
//...
private slots:
//...
void cancelCurrentOperation();

/....
};
Использую в библиотеке так:
Код
C++ (Qt)
ui->showProgressBar(tr("Downloading Wine..."), SLOT(cancelCurrentOperation()));
 
Когда выполняю программу - showProgress вызывается, но connect со слотом, который передается во 2-м аргументе в виде const char * не происходит. Выхлоп:

Код:
Showing progressbar with a slot 1cancelCurrentOperation()
Object::connect: No such slot WinegameUi::cancelCurrentOperation() in /home/pasha/work/winestuff/src/corelib.cpp:523

Как бы мне вырулить из этой ситуации?


Название: Re: Передача сигналов и слотов в функции
Отправлено: lit-uriy от Июнь 12, 2010, 05:17
какая-то ерунда у тебя получается.
Слот является личным (private) для класса corelib, а в WinegameUi::showProgressBar ты пишешь:
Цитировать
..., this, cancelSlot


Название: Re: Передача сигналов и слотов в функции
Отправлено: zenden от Июнь 12, 2010, 11:16
передавай не только название слота но и указатель на объект


Название: Re: Передача сигналов и слотов в функции
Отправлено: GreatSnake от Июнь 12, 2010, 11:22
И зачем городить огород?
Чем QProgressDialog::exec() не подходит?


Название: Re: Передача сигналов и слотов в функции
Отправлено: pashazz от Июнь 12, 2010, 15:43
передавай не только название слота но и указатель на объект

Спасибо, помогло.