crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> кнопка "?" - what's this
quarz
  опции профиля:
сообщение 6.5.2011, 17:14
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 3.11.2009
Пользователь №: 1202

Спасибо сказали: 5 раз(а)




Репутация:   0  


Все знают кнопку "?" в заголовке окна, которая запускает режим What's this.
Я хочу при нажатии на нее показывать окно с инфой о программе (для маленьких приложений, состоящих из одной формы и без меню это бывает очень нужно).
Нажатие на кнопку я научился перехватывать через событие QEvent::QueryWhatsThis. А вот режим What's this, в котором меняется указатель мыши и ждет клика на какой-нить элемент формы, у меня отключить не получается.
Есть способы это сделать?

P.S. нашел интересный атрибут у виджетов WA_CustomWhatsThis: Indicates that the widget wants to continue operating normally in "What's This?" mode.
По умолчанию он отключен, включение ничего не меняет. И как-то подозрительно мало в инетрнете об этом написано.

Еще нашел класс QWhatsThis, у которого есть статические методы enterWhatsThisMode(), leaveWhatsThisMode() и inWhatsThisMode().
При нажатии на кнопку "?" я в обработчике события вижу, что происходит вход в режим WhatsThis. Но программный выход из режима тоже ничего не меняет.
Курсор по-прежнему остается Qt::WhatsThisCursor и ждет клика по контролу :(

Сообщение отредактировал quarz - 6.5.2011, 18:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
quarz
  опции профиля:
сообщение 10.5.2011, 11:59
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 3.11.2009
Пользователь №: 1202

Спасибо сказали: 5 раз(а)




Репутация:   0  


тогда спрошу иначе:

почему никто не использует кнопку "?" для отображения окна "О программе", это же удобно? На всех форумах спрашивают только как ее скрыть.
Или я что-то не понимаю в интерфейсах?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
quarz
  опции профиля:
сообщение 10.5.2011, 13:22
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 3.11.2009
Пользователь №: 1202

Спасибо сказали: 5 раз(а)




Репутация:   0  


Разобрался :)
Режим WhatsThis при включении инициирует событие QEvent::EnterWhatsThisMode, в его обработчике и надо выключать режим.
Часть кода для минимального примера:
Раскрывающийся текст
bool aboutTest::event(QEvent *mEvent)
{  
    if(mEvent->type() == QEvent::EnterWhatsThisMode)    //не даем войти в режим WhatsThis
        QWhatsThis::leaveWhatsThisMode();
    else if (mEvent->type()==QEvent::QueryWhatsThis)    //при нажатии на "?" показываем окно "О программе"
    {
        about();
    }
    return QMainWindow::event(mEvent);
}

void aboutTest::about()
{
    QMessageBox::about(this, tr("About Icons"),
            tr("The <b>Icons</b> example illustrates how Qt renders an icon in "
               "different modes (active, normal, disabled, and selected) and "
               "states (on and off) based on a set of images."));
}

А вопрос о целесообразности такого применения остается
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.7.2022, 12:00