Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Spark от Июнь 27, 2013, 09:44



Название: Скрыть ToolButton на ToolBare.
Отправлено: Spark от Июнь 27, 2013, 09:44
Иконку Action на тулбаре скрыть достаточно просто:
Код:
myAction->setVisible( false );
Для ToolBatton эта функция не действует. Если в функции прописать Action предписнный по умолчанию для этой кнопки, то кнопка становится просто не активной, но иконка не исчезает.
Есть ли простой способ это сделать?


Название: Re: Скрыть ToolButton на ToolBare.
Отправлено: Vass от Июнь 27, 2013, 10:03
не понял вопроса, у кнопки тоще есть метод setVisible вызывайте его. или еще лучше вызывайте hide();


Название: Re: Скрыть ToolButton на ToolBare.
Отправлено: Spark от Июнь 27, 2013, 10:08
не понял вопроса, у кнопки тоще есть метод setVisible вызывайте его. или еще лучше вызывайте hide();
Судя по ответу, вы поняли вопрос. Только, к сожалению, для ToolBatton эти методы не действуют, на сколько я понял из справочника и практики.


Название: Re: Скрыть ToolButton на ToolBare.
Отправлено: Vass от Июнь 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 которым уже можно работать.


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

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


Название: Re: Скрыть ToolButton на ToolBare.
Отправлено: Vass от Июнь 27, 2013, 12:02
Вам нужно идти от обратного, не action добавлять в конопку, а использовать для своих действий action полученный после добавления кнопки.


Название: Re: Скрыть ToolButton на ToolBare.
Отправлено: Spark от Июнь 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() ) );

Если не затруднит как бы вы переписали код?
Спасибо за помощь! В любом случае проблема решена.