#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();
который очищает панель инструментов…
Ну, я должен признать, что это немного сложно, но я не смог найти способ лучше. Если у вас, ребята, есть какие-либо предложения, пожалуйста, дайте мне знать…
Надеюсь, это все равно поможет…
Майки Майк