Russian Qt Forum
Ноябрь 26, 2024, 10:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Скрыть ToolButton на ToolBare.  (Прочитано 3384 раз)
Spark
Гость
« : Июнь 27, 2013, 09:44 »

Иконку Action на тулбаре скрыть достаточно просто:
Код:
myAction->setVisible( false );
Для ToolBatton эта функция не действует. Если в функции прописать Action предписнный по умолчанию для этой кнопки, то кнопка становится просто не активной, но иконка не исчезает.
Есть ли простой способ это сделать?
« Последнее редактирование: Июнь 27, 2013, 10:01 от Spark » Записан
Vass
Гость
« Ответ #1 : Июнь 27, 2013, 10:03 »

не понял вопроса, у кнопки тоще есть метод setVisible вызывайте его. или еще лучше вызывайте hide();
Записан
Spark
Гость
« Ответ #2 : Июнь 27, 2013, 10:08 »

не понял вопроса, у кнопки тоще есть метод setVisible вызывайте его. или еще лучше вызывайте hide();
Судя по ответу, вы поняли вопрос. Только, к сожалению, для ToolBatton эти методы не действуют, на сколько я понял из справочника и практики.
Записан
Vass
Гость
« Ответ #3 : Июнь 27, 2013, 10:25 »

Да вы правы, для кнопок на тулбоксе это не работает, но вот например такой код отлично работает:
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QToolButton *button = new QToolButton(ui->mainToolBar);
    button->setText("balbla");
    QToolButton *button2 = new QToolButton(ui->mainToolBar);
    button2->setText("hideshow");
    action = ui->mainToolBar->addWidget(button);
    ui->mainToolBar->addWidget(button2);
    connect(button2, SIGNAL(clicked()), this, SLOT(onclk()));
}

void MainWindow::onclk()
{
    action->setVisible(!action->isVisible());
}

т.е. метод addWidget возвращает указатель на свежесозданный QAction для нашей тулкнопки, c которым уже можно работать.
Записан
Spark
Гость
« Ответ #4 : Июнь 27, 2013, 11:19 »

Спасибо работает.
Небольшое уточнение, что бы не осталось недопонимания. Надо просто на место Action пописать любое имя (несуществующий экшен)?
Этот код работает. Он корректен?
Код:
myButton->setDefaultAction( myAction );
anyAction = navToolbar->addWidget(myButton);

Если ставлю Action, который прописан для этой кнопки по умолчанию, то этот Action перестает работать.
Здесь кнопка уже перестает откликаться на левую кнопку мыши.
Код:
myButton->setDefaultAction( myAction );
myAction = navToolbar->addWidget(myButton);
Записан
Vass
Гость
« Ответ #5 : Июнь 27, 2013, 12:02 »

Вам нужно идти от обратного, не action добавлять в конопку, а использовать для своих действий action полученный после добавления кнопки.
Записан
Spark
Гость
« Ответ #6 : Июнь 27, 2013, 14:58 »

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

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

Но вот как работает:
Код
C++ (Qt)
 myAction = new QAction( QIcon( ":/icons/icon1.png" ), tr( "blabla" ), this );
 
 
 myButton = new QToolButton( Toolbar );
 myButton ->setPopupMode( QToolButton::MenuButtonPopup );
 
 myButton->setMenu( myMenu );
 myButton->setDefaultAction( myAction );
 myButton->setIcon( QIcon (":/icons/icon2.png") );
 myButton->setContextMenuPolicy( Qt::CustomContextMenu );
 
 anyAction = Toolbar->addWidget(myButton);
 
 connect( myButton, SIGNAL( customContextMenuRequested( const QPoint & ) ),
          this, SLOT( myAction2() ) );

Если не затруднит как бы вы переписали код?
Спасибо за помощь! В любом случае проблема решена.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 21.