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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отловить текст Action в меню.  (Прочитано 6583 раз)
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« : Июнь 15, 2015, 13:11 »

Контекстное меню:
Код
C++ (Qt)
void paneWidget::showCustomMenu(const QPoint &pos)
{
 QMenu * arrowMenu = new QMenu( this );
 arrowMenu ->addAction( "anytext1" );
 arrowMenu ->addAction( "anytext2" );
 
 QAction * textAction = arrowMenu ->exec( m_toolButtonArrow->mapToGlobal( pos ) );
 
 qDebug() << textAction->text();
}
Если выбрать пункт меню, проблем нет. Если открыть меню и закрыть, вылетает программа.
Как правильно?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Июнь 15, 2015, 13:27 »

1. Проверять возвращаемое значение на 0 (или NULL, как больше нравится).
2. Выучить С/C++
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Июнь 15, 2015, 13:29 »

1. Проверять возвращаемое значение на 0 (или NULL, как больше нравится).
nullptr же.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #3 : Июнь 15, 2015, 13:32 »

nullptr только в 11-ом стандарте. Но как вариант - не исключается.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Июнь 15, 2015, 13:52 »

nullptr только в 11-ом стандарте.
А чем эстетов просто ноль не устроил?  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июнь 15, 2015, 13:56 »

nullptr только в 11-ом стандарте.
А чем эстетов просто ноль не устроил?  Улыбающийся
Зачем 0, если есть предназначенная для этого вещь? А вот NULL вообще лучше вычеркнуть. Только давайте без холиваров - уже были.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #6 : Июнь 15, 2015, 13:58 »

Извините конечно, но что собственно проверять?
Если это:
if(!textAction->text().isNull());
Ну так проверял вылетает при проверке. Иначе бы не спрашивал.
QAction не знает такой проверки.
Что еще могу прверить на isNull?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #7 : Июнь 15, 2015, 14:06 »

Разве не ясно было сказано: проверять возвращаемое значение. А не пытаться вызвать метод для несуществующего объекта.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Июнь 15, 2015, 14:09 »

А чем эстетов просто ноль не устроил?  Улыбающийся

Код:
void f(int) {}
void f(void *) {}

void g()
{
    f(0); // f(int)
    f(nullptr); // f(void*)
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



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

Извините конечно, но что собственно проверять?
Если это:
if(!textAction->text().isNull());
Ну так проверял вылетает при проверке. Иначе бы не спрашивал.
QAction не знает такой проверки.
Что еще могу прверить на isNull?


Посмотрите что возвращается:
qDebug() << textAction;
Записан

Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #10 : Июнь 15, 2015, 15:07 »

В ветке для новичков просто пытался получить чуть более конкретный ответ. Получил бы, нашел бы ошибки сразу.
Пытался я проверить с самого начала возвращаемое значение на ноль, но в одном случае допустил банальную ошибку, машинально поставил точку с запятой после условия и отмел этот вариант. isNull не оказалось такого метода, но зациклился именно на нем после неудачного первого варианта. Вот и пришлось часать репу, что не так.
В общем спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Июнь 15, 2015, 15:15 »

Код:
void f(int) {}
void f(void *) {}

void g()
{
    f(0); // f(int)
    f(nullptr); // f(void*)
}
Понял, спасибо

Разве не ясно было сказано: проверять возвращаемое значение.
Ну, накинулись на новичка Улыбающийся  А что такое "возвращаемое значение"? Нет, я конечно сам часто употребляю это выражение - но вот дать четкое определение затрудняюсь. А Вы?

(ну вот, щас начнут тыкать в нос ссылками...)
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #12 : Июнь 15, 2015, 15:42 »

Ну, накинулись на новичка Улыбающийся  А что такое "возвращаемое значение"? Нет, я конечно сам часто употребляю это выражение - но вот дать четкое определение затрудняюсь. А Вы?
Тема конечно для новичков, но, все-таки, для новичков в Qt. А без знания основ языка разработку программ с использованием Qt не стоит начинать.
Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #13 : Июнь 15, 2015, 16:50 »

Это вечный вопрос. С чего стоит с чего не стоит. Специально безвылазно штудировал C/C++, хотя до этого кодил, но как то спонтанно, урывками читая куски информации. Но решил так. Однако я так же специально не кропал бесполезный код примеров. Просто внимательно читал/слушал и не одну книгу и видеокурс... И шаг за шагом разбирал примеры с листа, пока не осозновал до конца. Но для этого пришлось дважды просмотреть видематериал разных точек зрения и книг, пока не прочитав от корки до корки не осознал, что наконец все ясно (во всяком случае пока читаешь нет неясностей).
Но вот практикой я сознательно не занимался, что бы не отвлекаться. Сейчас же на конкретных задачах ее и прохожу. Вроде как все ясно, но отсутствие этой самой практики заставляет сомневаться, что делаю все верно если что то сразу не пошло.
Так что не так все плохо у меня с теорией.
В этом случае что то не заладилось и конечно мне бы увидеть всего лиш одну строчку if( textAction != NULL ) было бы гораздо полезнее, что бы понять в чем ошибка без лишних дискусий.
Я же пытался притулить if( !textAction.isNull ).
Но раз вы утверждаете, что должно работать (прада как имено не говоря) значит шел в том направлении и осталось подумать, как еще можно. Проблемы то никакой нет, задачка то простенькая, но все таки это опыт. Думаю сами на подобном спотыкались.
Часто тут говорят "Мы мол не экстрасенсы", но какого начинающим? Им ведь сложне понимать с полуслова. Однако, могу сказать, что сейчас мне намного проще понять чем год назад и закрепить полученный навык.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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