Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: maksimAstraLin от Август 21, 2017, 14:18



Название: Не работает сигнал 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
#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";
}


Название: 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