Название: Не работает сигнал tabBarClicked(int) Отправлено: maksimAstraLin от Август 21, 2017, 14:18 Здравствуйте.
Через Qt Creator создал стандартное приложение Qt Widgets. Через Qt Designer на mainwindow.ui-форме разместил QTabWidget с несколькими вкладками. Из Qt Creator открыл mainwindow.ui и, используя "перейти к слоту" создал обработчики для QTabWidget: currentChanged(int) и tabBarClicked(int). Запустив программу, выяснил, что работает только currentChanged(int). Подскажите, пожалуйста, почему программа может не обращать внимания на клики по tabBar'у? Операционная система: Astra Linux С уважением, Максим. Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: Bepec от Август 21, 2017, 14:20 Код приведите, а там и разговаривать будем. А пока что мы с вами сможем только делить шкуру не убитого медведя :D
Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: maksimAstraLin от Август 21, 2017, 14:47 Предполагаю, что дело не в коде, а в моих кривых руках или в операционной системе. Если делаю то же самое в qt на windows, то работает как нужно.
Один и тот же код в Astra linux не работает, а в Windows 7 работает. Правда, Linux у меня стоит на виртуальной машине - VMVare. В общем, тяжелый случай... =) Для примера вот: заголовочный: Код: #ifndef MAINWINDOW_H Код: #include "mainwindow.h" Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: Bepec от Август 21, 2017, 15:29 Сразу бы написали что код работает на винде.
Следовательно проблема в реализации скорее всего под linux. (или под конкретный astra linux) Так же назовите версию используемого Qt. Ибо в 4.8 насколько я помню такого сигнала просто тупо не было :D (который таббаркликед) Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: maksimAstraLin от Август 21, 2017, 16:03 Благодарю за замечание. Отложу в памяти =)
Виртуальная машина: VMware Workstation 11.0.0 buil-2305329. Хостовая ОС: Windows 7 Профессиональная Service Pack 1 64-разрядная. Гостевая ОС: Astra Linux Special Edition 1.4 (релиз "Смоленск"). Среда разработки: Qt Creator 3.1.1 Основан на Qt 5.3.0 (GCC 4.7.2, 64 бита). Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: Bepec от Август 21, 2017, 16:09 1) при компиляции смотрите в вывод - нет ли там строк о неподсоединённых сигналах/слотах или неправильном их описании?
2) Проверьте в документации, еcть ли там вообще этот сигнал? 3) зацепите в дизайнере этот слот на, допустим, spinBox. Чтобы точно удостовериться что проблема в библиотеке, а не вашем коде. Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: maksimAstraLin от Август 21, 2017, 16:52 1. Вы абсолютно правы. При компиляции я получил четкое подтверждение, что этот сигнал не был обнаружен: "QMetaObject::connectSlotsByName: No matching signal for on_tabWidget_tabBarClicked(int)".
2. К сожалению, из Qt Creator перейти в документацию у меня не получилось, а также не смог на скорую руку найти документацию в каталогах qt на диске. Но в документации на сайте http://doc.qt.io/qt-5/qtabwidget.html сказано, что сигнал void QTabWidget::tabBarClicked(int index) был введен в Qt 5.2 , который, вроде как старше моего Qt 5.3. 3. Как выяснилось, Qt Designer тоже не знает о существовании этого сигнала. Не ясно только, откуда Qt Creator о нём знает. На всякий случай добавил на форму кнопку, создал обработчик нажатия и добавил в него вызов функции on_tabWidget_tabBarClicked(int index). Функция отработала нормально. Подскажите, пожалуйста. Существует ли возможность обучить мой Qt этому магическому функционалу? Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: Old от Август 21, 2017, 16:57 Выберите в QtCreator:
Инструменты -> Параметры -> Сборка и запуск -> Профили Qt и напишите какие версии Qt у вас подключены. Название: Re: Не работает сигнал tabBarClicked(int) Отправлено: maksimAstraLin от Август 21, 2017, 17:05 Ух ты! А вы зрите в корень!
Под личиной Qt 5.3 на самом деле скрывается кое-кто постарше: Qt 4.8.6 |