QToolButton
(Google Chromeと同様)を使用して"+"
(new tab button
)ボタンを実装するために、QTabBar
のクラスを派生しました。しかし、それは私のLinuxマシンでは動作していますが、私のWindowsマシンでは動作しません。私のは私のwindows machine
には表示されませんが、私のLinuxマシン(Ubuntu
)に表示されていることを意味しません。理由を理解するための実験をほとんど試していないのに、それをデバッグすることはできませんが、うまくいきません。QToolButtonがウィンドウに表示されない
私のソースファイル:
#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
はEDIT:
私はさらにいくつかの実験を試してみましたが、QToolButton
がタブに次の領域の後ろに隠れている知って持っていますバー。スクリーンショットを参照してください。
コードのインデントを修正したい場合があります。 – tambre
'' QHidget :: updateGeometry'(http://doc.qt.io/qt-5/qwidget.html#updateGeometry)を 'movePlusButton'の最後に' sizeHint'が持っていると期待していました影響を受けている。それ以外は明らかな問題は見当たりません。 'movePlusButton'の最後に' QTabBar'の 'rect()'と 'new_button_'の' geometry() 'を印字して、値がすべて意味を持つかどうかを確認してください。 –
私はあなたが提案したことを試しましたが、うまくいきませんでした。あなたはそれを実行し、何が間違っているのを見てみることができますか? – abhiarora