c++ - QToolBar 扩展按钮

标签 c++ qt

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

|xxxxxxxxxxxxxxxx|b-----------------|xxxxxxx|

(b) 是一个工具栏,里面装满了书签(QToolButton's)。当主工具栏 (a) 完全充满书签时,我会看到一个无法点击的 >> 扩展按钮,并且新书签正在消失,但我可以测试并看到它们正在创建。

关于如何让这个扩展按钮正常工作有什么想法吗?

最佳答案

不要使用嵌套的工具栏,这不是一个好主意。而是使用 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));
}

测试.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

关于c++ - QToolBar 扩展按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10340114/

相关文章:

c++ - QTcp 服务器 : bind socket with custom options

c++ - 转让独家所有权 : unique_ptr vs move semantics

c++ - 函数模板和缩写函数模板之间的等价关系

c++ - 为什么 std::uint32_t 与 uint32_t 不同?

c++ - Visual Studio const_iterator 分配错误

c++ - 在 QTreeView 中查找 QModelIndex 可见行的更简单方法

c++ - 串行数据包丢失 - QTSerialPort

Android studio Arctic Fox beta 3 on M1 Chip (Apple Silicon) 模拟器无法启动 : "The emulator process for AVD ' myAvdName' has terminated."

c++ - 从 std::map 多个键中删除的最佳技术

c++ - cmake、conan 和 qt hello world 项目构建错误