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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработка события кнопки в динамически созданной вкладке.  (Прочитано 2881 раз)
Deusex25
Гость
« : Июль 20, 2016, 13:38 »

Доброго времени дня всем.

Есть следующая задача:
Приложение с центральным виджетом вкладки (QTabWidget) в котором, в зависимости от выбранных настроек, к постоянным добавляются / убираются динамические вкладки. В каждой вновь созданной вкладке необходимо наличие кнопки (QToolButton) для выбора и загрузки файла с данными для обработки.

Проблема:
Кнопка, созданная в такой вкладке не работает. При запуске приложения появляется ошибка (ещё до создания новой вкладки): QMetaObject::connectSlotsByName: No matching signal for on_tbltoolButton_clicked()
Если кнопка находится в статической вкладке, то проблем нет и всё пашет на ура!
Вот кусок кода, вызываемого событием:

void MainWindow::on_tbltoolButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty())
loadFile(fileName);
}

Код для кнопки:

QToolButton *toolButton; - в описании класса, в заголовочнике.

tbltoolbutton = new QToolButton(Direction_0);
tbltoolbutton->setObjectName(QStringLiteral("tbltoolbutton"));
tbltoolbutton->setGeometry(430, 30, 80, 30);
tbltoolbutton->setText(QApplication::translate("Rotation3D", "...", 0));

Direction_0 - динамически созданная вкладка.

Я с С++ и Qt новичок. Буду рад любой помощи.
« Последнее редактирование: Июль 20, 2016, 13:53 от Deusex25 » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Июль 20, 2016, 14:29 »

переименуй on_tbltoolButton_clicked в onTbltoolButton_clicked, что бы автоматического связывания не происходило и при создании кнопки соединяй сигнал clicked с onTbltoolButton_clicked вручную:

Код
C++ (Qt)
tbltoolbutton = new QToolButton(Direction_0);
tbltoolbutton->setObjectName(QStringLiteral("tbltoolbutton"));
tbltoolbutton->setGeometry(430, 30, 80, 30);
tbltoolbutton->setText(QApplication::translate("Rotation3D", "...", 0));
connect(tootbltoolbutton, SIGNAL(clicked()), this, SLOT(onTbltoolButton_clicked()));
 
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #2 : Июль 20, 2016, 14:54 »

Когда ты пишешь on_NameObject_clicked, то при загрузке происходит попытка автоматического соединения сигнала clicked объекта NameObject с данным слотом. На момент создания формы, кнопки у тебя нет, потому и связывать нечего.

Способ, описанный тебе Kurles правильный.
Записан
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #3 : Июль 20, 2016, 20:13 »

Когда ты пишешь on_NameObject_clicked, то при загрузке происходит попытка автоматического соединения сигнала clicked объекта NameObject с данным слотом. На момент создания формы, кнопки у тебя нет, потому и связывать нечего.

Способ, описанный тебе Kurles правильный.

А еще после создания можно вызвать QMetaObject::connectSlotsByName(this) и не надо вручную писать коннекты
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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