Qt Pb с QAction, QToolBar, QToolButton

#qt #button #action #toolbar

#qt #кнопка #Экшен #панель инструментов

Вопрос:

У меня здесь проблема.

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

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

Итак, я объявил 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 с верхней панели инструментов

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

В первый раз, когда я переключаюсь на вторую страницу, никаких проблем, моя кнопка создана и отображается на моей верхней панели инструментов.

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

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

Может быть, это может помочь, вот как я создаю экземпляр моей 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;");
  

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

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

Майки Майк


Привет, мир,

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

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

Майк


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

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

   void MainWindow::slideInAdd(){

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

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

     this->topToolBar->removeAction(backAction);
  

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

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

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

Майк

Ответ №1:

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

Готовы?

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) Подключаем кнопку к методу slideInMainVert() :

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

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

 topToolBar->clear();
  

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

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

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

Майки Майк