2012-04-26 2 views
1

У меня есть QToolBar (а) внутри QToolbar (б), а затем несколько QWidgets (х) в (а) выглядит немного как это:QToolBar Продлить Button

| XXXXXXXXXXXXXXXX | б ----------------- | ххххххй |

(b) - это панель инструментов, которая заполняется закладками (QToolButton). Когда основная панель инструментов (a) полностью заполняется закладками, я увижу кнопку >> extend, которая является незаметной, и новые закладки исчезают, хотя я могу проверить и увидеть, что они создаются.

Любые идеи о том, как получить эту расширенную кнопку для правильной работы?

+1

Для получения ответного ответа вам необходимо опубликовать код. Я немного подозрительно, является ли QToolbar внутри QToolbar хорошим Идея, я даже не вижу смысла в этом. – teukkam

ответ

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 
0

Вот ответ, который я искал, из QToolBar класса Reference: «Когда QToolBar не ребенок QMainWindow, он теряет способность заполнять расширение с помощью виджетов, добавленных на панель инструментов, с помощью addWidget(). Используйте действия виджета, созданные путем наследования QWidgetAction и реализации QWidgetAction :: createWidget(). »

Смежные вопросы