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

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

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Как сделать(сигнал/слот)

Автор: ruzik 13.5.2011, 18:23

У меня есть такая проблема есть сигнал, есть слот, сигнал принимает QString слот не отправляет ничего, как сделать так что бы при подаче этого сигнала вызывался нужный слот и туда отправилось нужное значение QString
Вот код

            connect(menuRecent_projects->actions()[a], SIGNAL(triggered()), this, 
                SLOT(openFileFromString(menuRecent_projects->actions()[a].text()))); //Вот нужный коннект

Фактически надо при нажатии нужного QAction открыть файл, а передать в слот текст этого QAction
Заранее спасибо за внимание

Автор: RazrFalcon 13.5.2011, 18:27

Лучше почитать маны. Сразу все вопросы пропадут.

Как вариант, если я правильно понял:

connect(openAction, SIGNAL(triggered()), this, SLOT(on_openAction_triggered()));

void MainWidow::on_openAction_triggered()
{
qDebug()<<openAtion->text();
}

Автор: ruzik 13.5.2011, 19:56

Мне нужно было немножко другое, но я уже сам справился
void RizekQssEditor::openFileByActionClicked()
{
openFileFromString(menuRecent_projects->activeAction()->text());
}
Но с помощью промежуточного слота, а я как раз и спрашивал как без него
Но все равно большое спасибо за помощь!

Попробовал свой вариант - выдает ошибку, странно, почему , говорит что недостаточно прав для чтения

Автор: RazrFalcon 13.5.2011, 20:46

1)

qDebug()<<menuRecent_projects->activeAction()->text()
2) Почему вы просто не пишете:
myAction->text();
Как вы его создаете?

Автор: Litkevich Yuriy 13.5.2011, 22:13

Цитата(ruzik @ 13.5.2011, 21:23) *
сигнал принимает QString слот не отправляет ничего
всё перепутал.
сигнал отправляет QString слот не принимает ничего

вот это вот:
menuRecent_projects->activeAction()->text()
неправильно.
А если нет метода activeAction(), что тогда? Как узнать у кого просить текст?

Делать надо так:
void RizekQssEditor::openFileByActionClicked()
{
    QObject *o = sender(); // Узнаем какой объект отправил сигнал (вызвал слот)
    QAction *a = qobject_cast<QAction *>(o); // попробуем привести тип этого объекта к ожидаемому (QAction)
    if (a)
        openFileFromString(a->text()); // если приведение типа удалось, то вызовим нужный метод ожидаемого объекта.
}

Автор: ruzik 14.5.2011, 13:55

Большое спасибо за помощь!

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