1

QToolBar(b)の中に( a) があり、(a) の中に(x) がQToolbarいくつかあります。QWidgets

|xxxxxxxxxxxxxxxxx|b-----------------|xxxxxxx|

(b) はブックマーク ( ) でいっぱいのツールバーQToolButtonです。メイン ツールバー (a) がブックマークで完全にいっぱいになると、クリックできない >> 拡張ボタンが表示され、新しいブックマークが消えますが、テストして、それらが作成されていることを確認できます。

この拡張ボタンを正しく機能させる方法についてのアイデアはありますか?

4

2 に答える 2

3

ネストされたツールバーを使用しないでください。これは良い考えではありません。代わりに を使用しQMainWindow、複数のツールバーをウィンドウに追加します。これにより、ツールバーをウィジェットに直接追加するのとは異なり、ユーザーはそれらを移動できます。

ハードコーディングされたブックマークを使用した Web ブラウザーの例: (注、本番コードではこのようなブックマークを行わないでください)

ここに画像の説明を入力

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();
}

テストプロ

QT += core gui webkit
SOURCES=test.cpp win.cpp
HEADERS=win.h
于 2012-04-27T12:17:05.480 に答える
1

QToolBarクラスリファレンスから私が探していた答えは次のとおりです。「QToolBarがQMainWindowの子でない場合、addWidget()を使用してツールバーに追加されたウィジェットを拡張ポップアップに取り込む機能が失われます。 QWidgetActionを継承し、代わりにQWidgetAction :: createWidget()を実装することによって作成されたウィジェットアクション。」

于 2012-04-30T16:53:59.803 に答える