Russian Qt Forum
Май 17, 2024, 23:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача сигналов и слотов в функции  (Прочитано 4093 раз)
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

Как бы мне вырулить из этой ситуации?
« Последнее редактирование: Июнь 12, 2010, 02:21 от pashazz » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июнь 12, 2010, 05:17 »

какая-то ерунда у тебя получается.
Слот является личным (private) для класса corelib, а в WinegameUi::showProgressBar ты пишешь:
Цитировать
..., this, cancelSlot
Записан

Юра.
zenden
Гость
« Ответ #2 : Июнь 12, 2010, 11:16 »

передавай не только название слота но и указатель на объект
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Июнь 12, 2010, 11:22 »

И зачем городить огород?
Чем QProgressDialog::exec() не подходит?
Записан

Qt 5.11/4.8.7 (X11/Win)
pashazz
Гость
« Ответ #4 : Июнь 12, 2010, 15:43 »

передавай не только название слота но и указатель на объект

Спасибо, помогло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.269 секунд. Запросов: 20.