我在a(b QToolBar
)里面有一个QToolbar
(a),后面是(a)里面的几个QWidgets
(x) 看起来有点像这样:
|xxxxxxxxxxxxxxx|b-----------------|xxxxxxx|
(b) 是一个工具栏,里面装满了书签 ( QToolButton
's)。当主工具栏 (a) 完全填满书签时,我将看到一个无法点击的 >> 扩展按钮,并且新书签正在消失,尽管我可以测试并看到它们正在创建中。
关于如何让这个扩展按钮正常工作的任何想法?
不要使用嵌套工具栏,这不是一个好主意。而是使用QMainWindow
, 并向窗口添加多个工具栏。这将允许用户移动它们,这与将工具栏直接添加到小部件不同。
带有硬编码书签的示例网络浏览器:(注意,不要在生产代码中做这样的书签)
赢.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
赢.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));
}
测试.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
这是我正在寻找的答案,来自 QToolBar 类参考:“当 QToolBar 不是 QMainWindow 的子级时,它失去了使用 addWidget() 添加到工具栏的小部件来填充扩展弹出窗口的能力。请使用通过继承 QWidgetAction 并实现 QWidgetAction::createWidget() 而创建的小部件操作。”