Qt Pb с QAction, QToolBar, QToolButton - PullRequest
       34

Qt Pb с QAction, QToolBar, QToolButton

0 голосов
/ 29 апреля 2011

У меня тут проблема.

Я создаю приложение Qt, которое использует slideStackedWidgets для перемещения с одной страницы на другую.

У меня есть 2 панели инструментов, topToolBar и bottomToolBar, которые не скользят при перемещении центрального виджета.

Итак, я объявил QAction в моем mainWindow.h

 QAction *backToMainVert;

И в моем mainWindow.cpp, когда я вызываю второе представление нажатием кнопки, я вызываю метод slideInAdd (), который выглядит следующим образом:

slidingStacked->slideInIdx(1); //this takes me back to my second page
backToMainVert = this->topToolBar->addWidget(backBarButton); 
//this adds a backButton to the topToolBar

Теперь backBarButton подключен к методу slideToMain (), который при запуске возвращает меня на мою первую страницу и удаляет backBarButton из topToolBar

    this->topToolBar->removeAction(backToMainVert);
    slidingStacked->slideInIdx(0);

При первом переключении на вторую страницу, нет проблем, моя кнопка создается и отображается на моем topToolBar.

Когда я нажимаю кнопку backBarButton, она возвращается на первую страницу.

НО во второй раз, когда я хочу вернуться с первой страницы на вторую страницу, backBarButton никогда не появляется.

Э-э, может, это поможет, вот как я создаю свой экземпляр backBarButton:

 backBarButton = new QToolButton(this);
 backBarButton->setText("Retour");
 backBarButton->setFixedSize(80,30);
 backBarButton->setStyleSheet("background-image: url(:/ToolBarButton.png);"
                             "background-repeat: no-repeat;"
                             "background-position: center center;"
                             "border:0;"
                             "color : white;"
                             "font-family: System;"
                             "font-style: bold;"
                             "font-size: 9pt;"
                             "color : white;");

Есть идеи, что мне здесь не хватает, пожалуйста?

Заранее спасибо, я застрял.

Мики Майк


Hello World,

Может ли кто-нибудь предложить другой способ достижения панели инструментов? Я хотел бы найти сам, но отладчик внутри Qt не дает мне много деталей. Это даже не останавливается на моей точке останова. С чего мне начать?

Спасибо за вашу помощь.

Mike


Хорошо, ребята,

Кажется, что единственный путь - это добавить QAction к topToolBar в методе slideInAdd ().

  void MainWindow::slideInAdd(){

     slidingStacked->setVerticalMode(true);
     slidingStacked->slideInIdx(1);
     backAction = new QAction(QIcon(":/ToolBarButton.png"), tr("&Retour"), this);
     topToolBar->addAction(backAction);
     connect(this->backAction,SIGNAL(triggered()),this, SLOT(slideInMainVert()));
 }

и это в методе slideInMainVert ():

    this->topToolBar->removeAction(backAction);

Это работает таким образом, но проблема в том, что я не могу понять, как настроить QToolButton, который появляется в topToolBar. Я бы хотел, чтобы он был больше размера по умолчанию (скажем ... 100x30) с некоторым текстом на нем (как на самом деле кнопка).

Не могли бы вы помочь мне, пожалуйста?

Большое спасибо ...

Mike

1 Ответ

2 голосов
/ 01 мая 2011

Я наконец нашел способ !!!

Готов?

1) Итак, сначала мы создадим виджет, который будет содержать макет с кнопками:

QWidget * toolBarContainerWidget = new QWidget(this);

2) затем создаем макет, который будет содержать кнопки

QHBoxLayout *toolBarLayout = new QHBoxLayout(toolBarContainerWidget);

3) затем мы создаем backButton:

QPushButton *testButton = new QPushButton("Go Back !",toolBarContainerWidget);
testButton->setFixedSize(80,20);
testButton->setStyleSheet("background-image: url(:/ToolBarButton.png);"
                          "background-repeat: no-repeat;"
                          "background-position: center center;"
                          "border:0;"
                          "color : white;"
                          "font-family: System;"
                          "font-style: bold;"
                          "font-size: 9pt;"
                          "color : white;");

4) Теперь мы добавляем нашу testButton к нашему toolBarLayout:

toolBarLayout->addWidget(testButton);

5) Мы устанавливаем макет как toolBarContainerWidget: (и здесь мозг начинает потеть;; -))

toolBarContainerWidget->setLayout(toolBarLayout);

6) Мы добавили этот виджет на нашу панель инструментов:

topToolBar->addWidget(toolBarContainerWidget);

7) Подключаем Button к методу slideInMainVert ():

QObject::connect(testButton,SIGNAL(clicked()),this,SLOT(slideInMainVert()));

8) Когда мы возвращаемся на первую страницу, мы используем:

topToolBar->clear();

, который очищает панель инструментов ...

Ну, я должен признать, что это немного сложно, но я не смог найти лучшего способа. Если у вас есть предложения, пожалуйста, дайте мне знать ...

Надеюсь, это все равно поможет ...

Мики Майк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...