Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Deusex25 от Июль 20, 2016, 13:38



Название: Обработка события кнопки в динамически созданной вкладке.
Отправлено: 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 новичок. Буду рад любой помощи.


Название: Re: Обработка события кнопки в динамически созданной вкладке.
Отправлено: Kurles от Июль 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()));
 


Название: Re: Обработка события кнопки в динамически созданной вкладке.
Отправлено: Bepec от Июль 20, 2016, 14:54
Когда ты пишешь on_NameObject_clicked, то при загрузке происходит попытка автоматического соединения сигнала clicked объекта NameObject с данным слотом. На момент создания формы, кнопки у тебя нет, потому и связывать нечего.

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


Название: Re: Обработка события кнопки в динамически созданной вкладке.
Отправлено: vipet от Июль 20, 2016, 20:13
Когда ты пишешь on_NameObject_clicked, то при загрузке происходит попытка автоматического соединения сигнала clicked объекта NameObject с данным слотом. На момент создания формы, кнопки у тебя нет, потому и связывать нечего.

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

А еще после создания можно вызвать QMetaObject::connectSlotsByName(this) и не надо вручную писать коннекты