首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QToolButton在windows中不可见

QToolButton在windows中不可见
EN

Stack Overflow用户
提问于 2017-07-21 15:39:31
回答 1查看 368关注 0票数 10

我使用QToolButton (类似于google chrome)派生了实现"+" (new tab button)按钮的QTabBar类。然而,它可以在我的Linux机器上运行,但不能在我的windows机器上运行。所谓不工作,是指QToolButton在我的windows machine中不可见,但在我的Linux机器(Ubuntu)中是可见的。我不能进一步调试它,因为我已经尝试了很少的实验来理解原因,但它不起作用。

我的源文件:

代码语言:javascript
复制
#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();
}

我的头文件:

代码语言:javascript
复制
#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隐藏在标签栏旁边的region后面。请参考截图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 22:53:10

显然,您的应用程序使用样式表或其他东西来自定义显示,这与您的TabBar类不兼容。

下载了你的代码,写了一个简单的main:

代码语言:javascript
复制
#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,因为它有一些硬编码的值,可能与当前的显示样式不兼容):

代码语言:javascript
复制
if (totalWidth > w)
    new_button_->move(w-40, tab_height - 30);
else
    new_button_->move(totalWidth + 5, tab_height - 30);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45231818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档