Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача текстовых параметров в Слот при отработке QAction
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
JuryS1806
Здравствуйте, товарищи !

Вот для себя сделал важное открытие, думаю может кому пригодится.
Имею 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.
Гость
такой код есть в examples\recent files:) Но вещь полезная, да
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.