【问题标题】:Transient scrollbar in QtQt中的瞬态滚动条
【发布时间】:2015-05-12 05:53:10
【问题描述】:

我想在 Qt 应用程序中使用瞬态滚动条(滚动内容时会出现瞬态滚动条,不再需要时会消失)。为此,我继承了类 QproxyStyle 并重新实现了函数 styleHint。代码放在下面。 文件滚动条.h:

#include <QStyle>
#include <QCommonStyle>
#include <QProxyStyle>

class ScrollBarStyle : public QProxyStyle
{
public:
    int styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *hret) const;
};

文件滚动条.c:

#include "ScrollBar.h"

int ScrollBarStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *widget,QStyleHintReturn *hret) const
{
    int ret = 0;

    switch (sh) {
    case SH_ScrollBar_Transient:
        ret = true;
        break;
    default:
        return QProxyStyle::styleHint(sh, opt, widget, hret);
    } 

    return ret;
}

文件 MainWindow.h:

#include <QMainWindow>
#include <QTextEdit>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

文件 MainWindow.cpp:

#include <QTextEdit>
#include "MainWindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QTextEdit *l = new (std::nothrow) QTextEdit(this);
    if (l == 0)
        return;
    setCentralWidget(l);
}

MainWindow::~MainWindow()
{
}

文件 main.cpp:

#include "ScrollBar.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    ScrollBarStyle *style = new (std::nothrow) ScrollBarStyle;
    if(style == 0)
        return -1;

    style->setBaseStyle(a.style());
    w.show();

    return a.exec();
}

但我遇到了一个问题:瞬态滚动条只出现过一次(当文本不适合文本区域时)然后它就消失了,再也不会出现。

那么我该如何解决这个问题呢? 谢谢!

【问题讨论】:

    标签: macos qt qstyle


    【解决方案1】:

    您忘记将样式设置为应用程序。

    a.setStyle(style);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多