首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QToolBar扩展按钮

QToolBar扩展按钮
EN

Stack Overflow用户
提问于 2012-04-26 19:31:20
回答 2查看 2K关注 0票数 1

我有一个QToolBar (a)在QToolbar (b)中,后面跟着几个QWidgets (x)在(a)中看起来有点像这样:

xxxxxxxxxxxxxxxx

(b)是一个充满书签(QToolButton's)的工具栏。当主工具栏(a)完全填充书签时,我将看到一个不可点击的>>扩展按钮,新的书签正在消失,尽管我可以测试并看到它们正在创建。

对于如何使这个扩展按钮正确工作,有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-27 12:17:05

不要使用嵌套工具栏,这不是一个好主意。相反,使用QMainWindow,并向窗口添加多个工具栏。这将允许用户四处移动,不像直接向小部件添加工具栏。

使用硬编码书签的web浏览器示例:(注意,不要在生产代码中使用这样的书签)

win.h

代码语言:javascript
复制
#ifndef _WIN_H_
#define _WIN_H_

#include <QtGui>
#include <QtWebKit>

class TestWindow : public QMainWindow
{
    Q_OBJECT
    public:
        TestWindow();


    private slots:
        void loadUrl(const QString& url);

    private:
        QWebView* mView;
        QSignalMapper* mUrlMap;
        Q_DISABLE_COPY(TestWindow)
};

#endif

win.cpp

代码语言:javascript
复制
#include "win.h"

TestWindow::TestWindow() :
    QMainWindow(),
    mView(new QWebView()),
    mUrlMap(new QSignalMapper(this))
{
    setCentralWidget(mView); // Takes ownership

    mView->load(QUrl::fromUserInput("http://qt-project.org/doc/"));

    connect(mUrlMap, SIGNAL(mapped(const QString&)), this, SLOT(loadUrl(const QString&)));

    QToolBar* tools = addToolBar("Tools");
    tools->addAction(mView->pageAction(QWebPage::Back));
    tools->addAction(mView->pageAction(QWebPage::Forward));
    tools->addAction(mView->pageAction(QWebPage::Stop));
    tools->addAction(mView->pageAction(QWebPage::Reload));

    QToolBar* bookmarks = addToolBar("Bookmarks");
    QAction* bkmkQtDoc = bookmarks->addAction(tr("Qt Documentation"));
    QAction* bkmkBbc = bookmarks->addAction(tr("BBC News"));

    connect(bkmkQtDoc, SIGNAL(triggered(bool)), mUrlMap, SLOT(map()));
    connect(bkmkBbc, SIGNAL(triggered(bool)), mUrlMap, SLOT(map()));

    mUrlMap->setMapping(bkmkQtDoc, "http://qt-project.org/doc/");
    mUrlMap->setMapping(bkmkBbc, "http://www.bbc.co.uk/");

}


void TestWindow::loadUrl(const QString& url)
{
    mView->load(QUrl::fromUserInput(url));
}

test.cpp

代码语言:javascript
复制
#include <QtGui>
#include "win.h"

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    TestWindow win;

    win.show();

    return app.exec();
}

test.pro

代码语言:javascript
复制
QT += core gui webkit
SOURCES=test.cpp win.cpp
HEADERS=win.h
票数 3
EN

Stack Overflow用户

发布于 2012-04-30 16:53:59

下面是我从QToolBar类引用中寻找的答案:“当QToolBar不是QMainWindow的子级时,它就失去了使用addWidget()将扩展填充到工具栏中的能力。请使用通过继承QWidgetAction和实现QWidgetAction::createWidget()创建的小部件操作。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10340114

复制
相关文章

相似问题

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