@AlexSer

Можно ли реализовать динамическое добавление пунктов меню в QT?

Новая проблема. Так как у меня программа для считывания данных с ком портов , то я решил чтобы было удобно подключатся, а не каждый раз вводить данные в поля настроек, добавлять устройства и настройки соединения к Бд, и соответвенно выводить добавленные устройства в toolbar и в menu.
И соотвественно код начинает приобретать такой вид:
QSqlQuery query("SELECT * FROM menu");
           int fieldNo = query.record().indexOf("title");
           while (query.next()) {
               QString apparat = query.value(fieldNo).toString();
               QByteArray qb =apparat.toUtf8();
               char* menu=qb.data();
               const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/icons/icons8-rs-232-male-40.png"));
               QAction *openAct = new QAction(openIcon, tr(menu), this);

               ui->toolBar_2->addAction(openAct);
               ui->menu->addAction(openAct);
                connect(openAct, SIGNAL(triggered()), this, SLOT(slotButton1()));
           }
           }


здесь я привязал пункты меню к slotButton1();
Но если устройства будет 10 штук, то соответвенно нужны. 10 слотов.
Т.е проблема у меня сейчас проблема создания динамических слотов....Можно ли их создавать и как?
Чтобы из слота запускать сигнал для соединяния каждого устройства со своими параметрами.
Или есть другой способ. Просто добавлять пункты меню для каждого устройства, писать слоты к каждому пункту как то не очень хочется..
  • Вопрос задан
  • 185 просмотров
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Вам не надо добавлять динамически слоты.
Достаточно подключить все в один слот, а в нем получить отправителя:
QAction *senderAction = qobject_cast<QAction*>(sender());

В каждый QAction засунуть информацию о идентификации через его методы либо через QAction::setProperty и доставать ее в слоте через senderAction->property(..).to..
Вместо QAction может быть любой другой отправитель наследник QObject.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы