Установка заголовка QMenu (Qt4)

Модератор: Модераторы разделов

Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Установка заголовка QMenu

Сообщение Assuri »

Почему-то не получается.
Я и при выделении памяти пробовал: QMenu *menu = new QMenu("xxx");
И функцией: menu->setTittle("xxx");

Все равно заголовка нигде не видно. А хочется такой же, как и у Амарок или у Копете.

Что не так?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

Честно говоря не совсем понял, что нужно.
У меня меню обычно так:

Код: Выделить всё

#include <QApplication>
#include <QLabel>
#include <QMenu>
#include <QAction>
#include <QTextCodec>
#include <QMenuBar>
#include <QMainWindow>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");

    QMainWindow *mainWidget = new QMainWindow();
    mainWidget->setWindowTitle(codec->toUnicode("Программа"));
    QMenuBar *menuBar = new QMenuBar(mainWidget);
    QMenu *helpMenu = new QMenu(codec->toUnicode("Справка"));

    QAction *actAboutQT = new QAction(codec->toUnicode("О Qt!"), mainWidget);
    QAction *actAbout = new QAction(codec->toUnicode("О программе"), mainWidget);


    helpMenu->addAction(actAbout);
    helpMenu->addAction(actAboutQT);
    menuBar->addMenu(helpMenu);

    mainWidget->setMenuBar(menuBar);

    mainWidget->show();

    return app.exec();
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
ged
Сообщения: 110
ОС: Slackware-current

Re: Установка заголовка QMenu

Сообщение ged »

Я так понял, что он хочет, чтобы было как в амароке. Когда на его иконке в трее кликаешь, в меню в самом верху появляется строка заголовок, он не активный, просто служит для озаглавливания меню. Типа красиво. Но как сделать я к сожаленью не знаю.
You can't kill time without injuring eternity.
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

ged писал(а):
12.09.2007 22:04
Я так понял, что он хочет, чтобы было как в амароке. Когда на его иконке в трее кликаешь, в меню в самом верху появляется строка заголовок, он не активный, просто служит для озаглавливания меню. Типа красиво. Но как сделать я к сожаленью не знаю.

Стоп, когда я клацаю по иконке в трее, у меня окно амарока сворачивается/разворачивается. Менюбар там вполне обычный.

Можно наглядно? А то интересно на самом деле.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...

Re: Установка заголовка QMenu

Сообщение Atragor »

Вот так.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

Мысль такая, что это может быть банальный QWidget + QHBoxLayout...
Щас попробую
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

Atragor писал(а):
12.09.2007 22:37
Вот так.

А, в трее...

Darth Liksys писал(а):
12.09.2007 22:44
Мысль такая, что это может быть банальный QWidget + QHBoxLayout...
Щас попробую

Кстати да. Pushbutton'ы в VBoxLayout напихать. А там уже с их стилем повозиться, чтобы топорно не выглядело.
Хотя не зря же есть QSystemTrayIcon::setContextMenu...

Addeed:
Всё работает...

Код: Выделить всё

#include <QApplication>
#include <QLabel>
#include <QMenu>
#include <QAction>
#include <QTextCodec>
#include <QMenuBar>
#include <QMainWindow>
#include <QSystemTrayIcon>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");

    QMainWindow *mainWidget = new QMainWindow();
    mainWidget->setWindowTitle(codec->toUnicode("Программа"));
    QMenuBar *menuBar = new QMenuBar(mainWidget);
    QMenu *helpMenu = new QMenu(codec->toUnicode("Справка"));
    QAction *actAboutQT = new QAction(codec->toUnicode("О Qt!"), mainWidget);
    QAction *actAbout = new QAction(codec->toUnicode("О программе"), mainWidget);
    actAbout->setDisabled(TRUE);
    QSystemTrayIcon *icon = new QSystemTrayIcon();

    helpMenu->addAction(actAbout);
    helpMenu->addSeparator();
    helpMenu->addAction(actAboutQT);
    menuBar->addMenu(helpMenu);

    mainWidget->setMenuBar(menuBar);
    icon->setContextMenu(helpMenu);

    mainWidget->show();
    icon->show();

    return app.exec();
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

Ггг, QMenu в Qt4 не принимает виджеты, только QAction :)
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

Darth Liksys писал(а):
12.09.2007 22:59
Ггг, QMenu в Qt4 не принимает виджеты, только QAction :)

Ну я имел в виду pop-up виджет, без QMenu.
Но в моём примере всё и так работает.
Фишка в QAction::setDisabled(bool b);
Дальше уже

Код: Выделить всё

void setFont ( const QFont & font )
void setIcon ( const QIcon & icon )

чтоб красиво было.
То бишь добавляем обычный QAction, только чуток его марафетим, ну и естественно на него ничего не вешаем..
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

Щас скачиваю исходники Amarok-2.0 из SVN, будем искать :)
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

В исходниках Амарока не нашел
Все, приехали - по запросу "System Tray Icon Example" Qt4-Assistant выдал прогу, в которой такой штуки нет. Видимо сделать фишку невозможно без переопределения QMenu. Я пока у себя в проге сделал QAction и задизаблил его. Больше идей нету)))
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

Сделал.

Код: Выделить всё

self.menu = Qt.QMenu()
self.title_menu_widget_action = Qt.QWidgetAction(None)
self.title_menu_widget_action_widget = Qt.QPushButton("Test")
self.title_menu_widget_action.setDefaultWidget(self.title_menu_widget_action_widget)
self.menu.addAction(self.title_menu_widget_action)
Python, но алгоритм думаю ясен :)
Суть в том, что надо потом к созданному виджет-актиону прицепить рандомный виджет. Я например подцепиил кнопку, но сделал ее нажимаемой иповесил на нее действие по раскрытию окна (то есть можно и кнопкой и кликом по иконке).
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

Darth Liksys писал(а):
13.09.2007 00:06
Я пока у себя в проге сделал QAction и задизаблил его. Больше идей нету)))

1) Посмотри выше, я писал то же самое.
2) Установить этому QAction иконку, поменять шрифт, и будет то что надо. Только фона серенького не будет.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

Фишка в том, что серенький фон тоже надо))) Это надо через QWidgetAction.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Установка заголовка QMenu

Сообщение Assuri »

То-есть этот заголовок нужно сделать средствами QAction+QWidgetAction?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Установка заголовка QMenu

Сообщение Liksys »

yea :)
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12

Re: Установка заголовка QMenu

Сообщение Assuri »

А как у QWidget установить фон в виде изображения?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Установка заголовка QMenu

Сообщение eduard_pustobaev »

-DooM- писал(а):
15.09.2007 17:40
А как у QWidget установить фон в виде изображения?

Код: Выделить всё

void QLabel::setPicture ( const QPicture & picture )
void QLabel::setPixmap ( const QPixmap & )

А QLabel в свою очередь наследник от QWidget...
Я так понимаю, меняться оно не должно, так что делаем фон сразу со значком проги и с надписью.

Либо на QWidget::paintEvent() нарисовать и фон и надпись, может заодно и полезную инфу(меняющуюся) тогда выводить.
В дисгармонии со вселенной.
Спасибо сказали: