QToolButton не виден в окнах

Я вывел класс QTabBar реализовать "+" (new tab button) с помощью кнопки QToolButton (похоже на Google Chrome). Тем не менее, он работает на моей машине с Linux, но не работает на моей машине с Windows. Я имею в виду не работать QToolButton не видно в моем windows machine но это видно в моей машине Linux (Ubuntu). Я не могу отладить его дальше, потому что я пробовал несколько экспериментов, чтобы понять причину, но это не сработало.

Мой исходный файл:

#include "tabbar.h"
TabBar::TabBar(QWidget *parent) : QTabBar(parent)
{
new_button_ = new QToolButton(this);
new_button_->setObjectName(QStringLiteral("AddButton"));
new_button_->setText("+");
new_button_->setFixedSize(QSize(20, 20));
connect(new_button_, SIGNAL(released()), this, SLOT(emit_new()));
movePlusButton();
}

QSize TabBar::sizeHint(void) const
{
QSize old = QTabBar::sizeHint();
return QSize(old.width() + 45, old.height());
}

void TabBar::emit_new(void)
{
emit newClicked();
}

void TabBar::movePlusButton(void)
{
quint64 totalWidth = 0;
for (long i=0; i < count(); i++)
totalWidth += tabRect(i).width();

quint64 h = geometry().top();
quint64 tab_height = height();
quint64 w = width();

if (totalWidth > w)
new_button_->move(w-40, tab_height - 30);
else
new_button_->move(totalWidth + 5, tab_height - 30);
}

void TabBar::resizeEvent(QResizeEvent *p_evt)
{
QTabBar::resizeEvent(p_evt);
movePlusButton();
}

void TabBar::tabLayoutChange(void)
{
QTabBar::tabLayoutChange();
movePlusButton();
}

Мой заголовочный файл:

#ifndef TABBAR_H
#define TABBAR_H

#include <QObject>
#include <QToolButton>
#include <QTabBar>
#include <QResizeEvent>
#include <QLabel>

class TabBar : public QTabBar {
Q_OBJECT

public:
TabBar(QWidget *parent=nullptr);
~TabBar() { }

void movePlusButton(void);void resizeEvent(QResizeEvent *p_evt) override;
void tabLayoutChange(void) override;
QSize sizeHint(void) const override;

private slots:
void emit_new(void);

signals:
void newClicked(void);

private:
QToolButton *new_button_;
};

#endif // TABBAR_H

РЕДАКТИРОВАТЬ:

Я попробовал еще несколько экспериментов и узнал QToolButton скрывается за областью рядом с вкладками. Пожалуйста, обратитесь к скриншоту.

введите описание изображения здесь

10

Решение

По-видимому, ваше приложение использует таблицу стилей или что-то еще для настройки дисплея, и это несовместимо с вашим TabBar учебный класс.

Скачал ваш код, написал простую главную:

#include <QApplication>
#include <QMainWindow>
#include "tabbar.h"
int main( int argc, char* argv[] )
{
QApplication app(argc, argv);

QMainWindow wnd;

TabBar* tabBar = new TabBar(&wnd);
wnd.setCentralWidget( tabBar );

tabBar->addTab( "Foo" );

wnd.show();

return app.exec();
}

скомпилирован и выполнен на Windows и получил это (проверено в классическом и аэро стиле):
введите описание изображения здесь

Так что, видимо, ваш код в порядке. Однако, если вы настроили QTabBar рендеринг через таблицу стилей (что я подозреваю, когда я вижу, как она выглядит в вашем графическом интерфейсе), вам может понадобиться адаптировать ваш код (возможно, movePlusButton поскольку он имеет некоторые жестко заданные значения, которые могут быть несовместимы с текущим стилем отображения):

if (totalWidth > w)
new_button_->move(w-40, tab_height - 30);
else
new_button_->move(totalWidth + 5, tab_height - 30);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]