2016-03-20 7 views
0

Ich schrieb ein Programm in qt Creator, aber es enthält diese anonyme ziehbare Symbolleiste, die ich gerne loswerden würde. Es wird nicht im Entwurfsmodus angezeigt. Wenn ich mit der rechten Maustaste darauf klicke, erscheint ein Menü mit einem Kontrollkästchen, das ich auswählen kann, um es während des Programmlaufs loszuwerden. Was ist das für eine Bar? Wie werde ich es loswerden? Wenn ich wüsste, was es ist, könnte ich es programmatisch sagen, dass es sich verstecken soll, wenn das Programm geladen wird.Wie entferne ich diese anonyme ziehbare Leiste in qtcreator?

Hier sind einige Screenshots, die dieses seltsame Problem demonstrieren. Im ersten Screenshot ist die Maus auf die Leiste gerichtet. Der zweite zeigt das Kontextmenü mit der rechten Maustaste. Die dritte zeigt das Programm ohne die Leiste. Die Box kann auch komplett aus dem Programmfenster gezogen werden. Ich kann bei Bedarf auch ein Bild hochladen.

(Maus zeigt auf bar) screen with box

(bar ein Rechtsklick-Menü hat!) right-click menu

(bar ist weg) no more box

+0

Mögliches Duplikat von [Qt: So entfernen Sie die Standard-Hauptsymbolleiste aus dem Hauptfenster?] (Http: // stackoverflow.com/questions/27314748/qt-how-to-entfernen-the-default-main-toolbar-from-the-mainwindow) – mfro

Antwort

1

Das Wichtigste zuerst neu zu erstellen, stellen Sie sicher, dass Sie haven Ich habe die Toolbar selbst nicht im Code hinzugefügt (das Designer-Formular ist nichts Magisches, es erzeugt nur normalen Qt-Code zu ui_XXXX.h, den Sie vollständig studieren sollten, damit Sie verstehen, was wirklich "unter der Haube" passiert).

Zweitens, das ist vielleicht die Hauptmenüleiste, nicht die Hauptwerkzeugleiste.

Dann, um die böse Bar zu entfernen. In der oberen rechten Ecke der Entwurfsansicht haben Sie eine Struktur aller Elemente in Ihrer Benutzeroberfläche. Finde dort die QToolBar. Es wird wahrscheinlich mainToolBar genannt. Rechtsklicken Sie darauf und entfernen Sie es dort. Oder, wenn Sie tatsächlich Menüleiste haben, dann finden Sie QMenuBar, wahrscheinlich menuBar genannt, und entfernen Sie es stattdessen. Denken Sie daran, vor diesem Schritt ein Commit zur Versionskontrolle (oder eine andere Sicherung) durchzuführen, damit Sie die Änderungen problemlos zurücksetzen können.


Wenn dies aus irgendeinem Grund fehlschlägt, und Sie wollen einfach nur, um es zu arbeiten, kann man immer finden und löschen (Vorsicht über die baumelnden Zeiger hinter sich gelassen, setzen Sie sie auf nullptr wenn möglich):

ui->setupUi(this); 
// a hack: we want to get rid of the toolbar and the menubar, 
// but can't remove it from the .ui, so we delete them like this. 
delete findChild<QToolBar *>(); // NULL return value is ok for delete 
delete findChild<QMenuBar *>(); // NULL return value is ok for delete 

Doc-Links für findChild und Alternative findChildren.

1

Was haben Sie da ist wahrscheinlich die mainToolBarQToolBar Objekt erhalten Sie mit jeder von QDesigner erstellten QMainWindow .ui Datei. Wenn Sie es loswerden wollen, suchen Sie es in Ihrer .ui Datei und löschen Sie es einfach.

Aber besser zweimal überlegen: Sie später entscheiden, könnten Sie ein QToolBar Objekt und (zumindest AFAIK) wollen gibt es keine Möglichkeit, es in QDesigner ...

+0

Meine 'mainwindow.ui' Datei hat eine mainToolBar, oder sogar irgendeine 'bar' oder 'Bar 'unter Suche. 'mainwindow.ui' ist die einzige ui-Datei, die ich in qtcreator sehe. –

+0

Seltsam. In welcher QtCreator-Version bist du? Ich bekomme dieses QToolBar-Objekt beim Erstellen eines neuen Projekts (und anscheinend ist es auch für Sie da?). Was sind die letzten drei Objekte in der Objektansicht des QDesigner-Plugins (normalerweise die obere rechte Ansicht im Designer-Fenster)? – mfro

+0

Mein Qtcreator ist Version 3.5.1. In der Objektansicht ist das einzige Objekt MainWindow. MainWindow hat ein Kind, centralWidget, und sein einziges Kind ist das tabWidget des Programms. –

0

Sie müssen diesen Code in Ihrem Konstruktor verwenden. ui-> mainToolBar-> toggleViewAction() -> setVisible (false);

mainToolBar ist mein Symbolleistenname.