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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменить QAction в меню в трее  (Прочитано 5414 раз)
wenny
Гость
« : Июнь 17, 2016, 13:43 »

Доброго времени суток. Есть меню, живущее в трее. Добавляю туда item:
Код
C++ (Qt)
QAction* connectionMenuItem = new QAction( trayIconMenu->addAction(
       QIcon( ":/connect.png" ),
       "Подключиться",
       parent,
       SLOT( connectToHipchatWithFileData() )
   ) );

Это есть кнопка подключения и отключения от сервера. Понятно, что после коннекта хотелось бы её переадаптировать под дисконнект. Для этого  сохраняю QAction и пытаюсь изменить, допустим, текст:
Код
C++ (Qt)
connectionMenuItem->setText( "Отключиться" );

однако текст нифига не меняется Непонимающий Спасибо.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Июнь 17, 2016, 13:53 »

Код
C++ (Qt)
QAction* connectionMenuItem = trayIconMenu->addAction(
       QIcon( ":/connect.png" ),
       "Подключиться",
       parent,
       SLOT( connectToHipchatWithFileData() )
);

addAction и так создает QAction
Записан

wenny
Гость
« Ответ #2 : Июнь 17, 2016, 13:57 »

addAction и так создает QAction
Я пытался на него сослаться.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июнь 17, 2016, 14:01 »

addAction и так создает QAction
Я пытался на него сослаться.

Вы создали action и у него в родителях прописали, созданный в addAction, через конструктор QAction::QAction(QObject * parent)
Записан

wenny
Гость
« Ответ #4 : Июнь 17, 2016, 14:06 »

Вы создали action и у него в родителях прописали, созданный в addAction, через конструктор QAction::QAction(QObject * parent)
Так что мне делать и как жить?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июнь 17, 2016, 14:23 »

Вы создали action и у него в родителях прописали, созданный в addAction, через конструктор QAction::QAction(QObject * parent)
Так что мне делать и как жить?

1.
Использовтаь один QAction. Завести флаг и по флагу менять его текст, а в слоте -- действия.

2.
Завести 2 QAction. И по флагу прятать/показывать нужный QAction
Записан

wenny
Гость
« Ответ #6 : Июнь 17, 2016, 14:26 »

А можно ли просто грохнуть определенный QAction и на то же место водрузить другой? Чтобы так не изголяться.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Июнь 17, 2016, 14:32 »

можно, но все равно ж надо знать как его найти или сохранять его в поле класса Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
wenny
Гость
« Ответ #8 : Июнь 17, 2016, 14:36 »

можно, но все равно ж надо знать как его найти или сохранять его в поле класса Улыбающийся
Вот я и запутался. Без примеров до утра буду кнопкотыкать Плачущий Мне не удается ничего сменить.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Июнь 17, 2016, 14:48 »

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

Пожалуйста:

Код
C++ (Qt)
#include <QMainWindow>
#include <QSystemTrayIcon>
 
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
   public:
       explicit MainWindow(QWidget *parent = 0);
 
   private slots:
       void messageReceived(QSystemTrayIcon::ActivationReason reason);
 
   public slots:
       void changeConnect(bool connect);
 
   private:
       QSystemTrayIcon tray;
       QAction* changeConnectAction;
};
 

Код
C++ (Qt)
#include "mainwindow.h"
#include <QMenu>
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent)
{
   tray.setIcon(QIcon(":/app_icon"));
   tray.setToolTip("Tray!");
 
   connect(&tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(messageReceived(QSystemTrayIcon::ActivationReason)));
 
   QMenu * trayMenu = new QMenu();
   changeConnectAction = trayMenu->addAction("Connect", this, SLOT(changeConnect(bool)));
   trayMenu->addSeparator();
   trayMenu->addAction("About");
   trayMenu->addSeparator();
   trayMenu->addAction("Quit");
 
   tray.setContextMenu(trayMenu);
   tray.show();
}
 
void MainWindow::messageReceived(QSystemTrayIcon::ActivationReason reason)
{
   if (reason == QSystemTrayIcon::Trigger) {
       setVisible(!isVisible());
   }
}
 
void MainWindow::changeConnect(bool connect) {
   if (connect) {
       changeConnectAction->setText("Connect");
       /// ...
 
   } else {
       changeConnectAction->setText("Disconnect");
       /// ...
 
   }
}
 
 
Записан

wenny
Гость
« Ответ #10 : Июнь 17, 2016, 17:47 »

Все, я понял свой косяк, спасибо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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