Ich habe die Klasse QTabBar
abgeleitet, um "+"
(new tab button
) Schaltfläche mit QToolButton
(ähnlich wie Google Chrome) zu implementieren. Allerdings funktioniert es in meinem Linux-Rechner, funktioniert aber nicht in meinem Windows-Rechner. Wenn ich nicht arbeite, meine ich QToolButton
ist nicht in meinem windows machine
sichtbar, aber es ist in meinem Linux-Rechner sichtbar (Ubuntu
). Ich bin nicht in der Lage, es weiter zu debuggen, da ich einige Experimente versucht habe, um den Grund zu verstehen, aber es hat nicht funktioniert.QToolButton nicht sichtbar in Windows
Meine Quelldatei:
#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();
}
Mein Header-Datei:
#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
EDIT:
ich mehr wenige Experimente versucht haben, und bekam QToolButton
versteckt sich hinter Region neben Tab wissen Riegel. Bitte beachten Sie den Screenshot.
Möglicherweise möchten Sie die Einrückung des Codes beheben. – tambre
Ich hätte einen Aufruf von ['QWidget :: updateGeometry'] (http://doc.qt.io/qt-5/qwidget.html#updateGeometry) am Ende von' movePlusButton' erwartet, wie der 'sizeHint' war betroffen. Abgesehen davon kann ich kein offensichtliches Problem sehen. Fügen Sie Code am Ende von 'movePlusButton' hinzu, um die' rect() 'von' QTabBar' und 'geometry()' von 'new_button_' auszudrucken, um zu sehen, ob die Werte sinnvoll sind. –
Ich habe versucht, was Sie vorgeschlagen haben, aber es hat nicht funktioniert. Können Sie versuchen, es auszuführen und zu sehen, was falsch ist? – abhiarora