QToolBar扩展按钮

时间:2012-04-26 19:31:20

标签: c++ qt

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

  

| XXXXXXXXXXXXXXXX | b ----------------- | XXXXXXX |

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

有关如何使此扩展按钮正常工作的任何想法?

2 个答案:

答案 0 :(得分:3)

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

带有硬编码书签的示例网络浏览器:(请注意,不要在生产代码中执行此类书签)

enter image description here

<强> win.h

#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

#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

#include <QtGui>
#include "win.h"

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

    TestWindow win;

    win.show();

    return app.exec();
}

<强> test.pro

QT += core gui webkit
SOURCES=test.cpp win.cpp
HEADERS=win.h

答案 1 :(得分:0)

以下是我正在寻找的答案,来自QToolBar类参考:“当QToolBar不是QMainWindow的子代时,它无法使用addWidget()添加到工具栏中的小部件弹出扩展弹出窗口请使用通过继承QWidgetAction并实现QWidgetAction :: createWidget()而创建的小部件操作。“