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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает сигнал tabBarClicked(int)  (Прочитано 691 раз)
maksimAstraLin
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« : Август 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

С уважением, Максим.
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7591


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #1 : Август 21, 2017, 14:20 »

Код приведите, а там и разговаривать будем. А пока что мы с вами сможем только делить шкуру не убитого медведя Веселый
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
maksimAstraLin
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #2 : Август 21, 2017, 14:47 »

Предполагаю, что дело не в коде, а в моих кривых руках или в операционной системе. Если делаю то же самое в qt на windows, то работает как нужно.
Один и тот же код в Astra linux не работает, а в Windows 7 работает. Правда, Linux у меня стоит на виртуальной машине - VMVare. В общем, тяжелый случай... =)

Для примера вот:
заголовочный:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <iostream>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_tabWidget_tabBarClicked(int index);

    void on_tabWidget_currentChanged(int index);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
и .cpp:
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_tabWidget_tabBarClicked(int index)
{
    std::cerr << "\n In MainWindow::on_tabWidget_tabBarClicked\n";
}

void MainWindow::on_tabWidget_currentChanged(int index)
{
    std::cerr << "\n In MainWindow::on_tabWidget_currentChanged";
}
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7591


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #3 : Август 21, 2017, 15:29 »

Сразу бы написали что код работает на винде.
Следовательно проблема в реализации скорее всего под linux. (или под конкретный astra linux)

Так же назовите версию используемого Qt. Ибо в 4.8 насколько я помню такого сигнала просто тупо не было Веселый  (который таббаркликед)


Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
maksimAstraLin
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #4 : Август 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 бита).
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7591


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #5 : Август 21, 2017, 16:09 »

1) при компиляции смотрите в вывод - нет ли там строк о неподсоединённых сигналах/слотах или неправильном их описании?
2) Проверьте в документации, еcть ли там вообще этот сигнал?
3) зацепите в дизайнере этот слот на, допустим, spinBox. Чтобы точно удостовериться что проблема в библиотеке, а не вашем коде.
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
maksimAstraLin
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #6 : Август 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 этому магическому функционалу?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 3823



Просмотр профиля
« Ответ #7 : Август 21, 2017, 16:57 »

Выберите в QtCreator:
Инструменты -> Параметры -> Сборка и запуск -> Профили Qt

и напишите какие версии Qt у вас подключены.
Записан
maksimAstraLin
Новичок

Offline Offline

Сообщений: 18


Просмотр профиля
« Ответ #8 : Август 21, 2017, 17:05 »

Ух ты! А вы зрите в корень!
Под личиной Qt 5.3 на самом деле скрывается кое-кто постарше: Qt 4.8.6
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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