crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Передача текстовых параметров в Слот при отработке QAction
JuryS1806
  опции профиля:
сообщение 18.11.2009, 0:55
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

Спасибо сказали: 9 раз(а)




Репутация:   0  


Здравствуйте, товарищи !

Вот для себя сделал важное открытие, думаю может кому пригодится.
Имею private slot, который универсальный для всех акшонов, только с разными параметрами.

для этого не обязательно использовать QSignalMapper.
Можно просто для QAction добавить setData, а потом эту дату взять в слоте.

У меня это получилось так:
void MainWindow::createBaseMenu()
{
// Создаю акшоны для выбора вида в текущем окне.
  SelectSverhuView = new QAction( QPixmap(":/Visual3D/Views/Resurs/Views/sverhu.png"),QObject::trUtf8("Вид сверху"), this);
  SelectSverhuView->setToolTip( QObject::trUtf8("Переключить на вид сверху") );
  SelectSverhuView->setStatusTip( QObject::trUtf8("Переключить вид текущего окна на вид сверху") );
  SelectSverhuView->setData(trUtf8("вид сверху"));
  connect( SelectSverhuView, SIGNAL( activated() ) , this, SLOT( MacroSlot() ) );
.........
}

Итого 300 акшонов, описанных в заголовке.

Далее в заголовке описываю private slot: MacroSlot() без параметров, а в теле программы:

void MainWindow::MacroSlot()
{
    QAction* action = qobject_cast<QAction*>(sender());
if(action)
{
    new MacroAnalizer(action->data().toString());
}

}

т.е. происходит поиск акшона, который отправил сигнал, а потом его значение переводится в QString и используется как текстовая переменная
Сэкономил еще 300 строк в MainWindow.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 18.11.2009, 11:30
Сообщение #2





Гости








    


такой код есть в examples\recent files:) Но вещь полезная, да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.4.2021, 23:46