Установка заголовка QMenu (Qt4)
Модератор: Модераторы разделов
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Установка заголовка QMenu
Почему-то не получается.
Я и при выделении памяти пробовал: QMenu *menu = new QMenu("xxx");
И функцией: menu->setTittle("xxx");
Все равно заголовка нигде не видно. А хочется такой же, как и у Амарок или у Копете.
Что не так?
Я и при выделении памяти пробовал: QMenu *menu = new QMenu("xxx");
И функцией: menu->setTittle("xxx");
Все равно заголовка нигде не видно. А хочется такой же, как и у Амарок или у Копете.
Что не так?
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
Честно говоря не совсем понял, что нужно.
У меня меню обычно так:
У меня меню обычно так:
Код: Выделить всё
#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
Я так понял, что он хочет, чтобы было как в амароке. Когда на его иконке в трее кликаешь, в меню в самом верху появляется строка заголовок, он не активный, просто служит для озаглавливания меню. Типа красиво. Но как сделать я к сожаленью не знаю.
You can't kill time without injuring eternity.
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
Стоп, когда я клацаю по иконке в трее, у меня окно амарока сворачивается/разворачивается. Менюбар там вполне обычный.
Можно наглядно? А то интересно на самом деле.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
В дисгармонии со вселенной.
-
Atragor
- Сообщения: 681
- Статус: ...
Re: Установка заголовка QMenu
Вот так.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
-
Liksys
- Сообщения: 2910
Re: Установка заголовка QMenu
Мысль такая, что это может быть банальный QWidget + QHBoxLayout...
Щас попробую
Щас попробую
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
А, в трее...
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
Ггг, QMenu в Qt4 не принимает виджеты, только QAction 
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
Ну я имел в виду pop-up виджет, без QMenu.
Но в моём примере всё и так работает.
Фишка в QAction::setDisabled(bool b);
Дальше уже
Код: Выделить всё
void setFont ( const QFont & font )
void setIcon ( const QIcon & icon )чтоб красиво было.
То бишь добавляем обычный QAction, только чуток его марафетим, ну и естественно на него ничего не вешаем..
В дисгармонии со вселенной.
-
Liksys
- Сообщения: 2910
Re: Установка заголовка QMenu
Щас скачиваю исходники Amarok-2.0 из SVN, будем искать 
-
Liksys
- Сообщения: 2910
Re: Установка заголовка QMenu
В исходниках Амарока не нашел
Все, приехали - по запросу "System Tray Icon Example" Qt4-Assistant выдал прогу, в которой такой штуки нет. Видимо сделать фишку невозможно без переопределения QMenu. Я пока у себя в проге сделал QAction и задизаблил его. Больше идей нету)))
Все, приехали - по запросу "System Tray Icon Example" Qt4-Assistant выдал прогу, в которой такой штуки нет. Видимо сделать фишку невозможно без переопределения QMenu. Я пока у себя в проге сделал QAction и задизаблил его. Больше идей нету)))
-
Liksys
- Сообщения: 2910
Re: Установка заголовка QMenu
Сделал.
Python, но алгоритм думаю ясен 
Суть в том, что надо потом к созданному виджет-актиону прицепить рандомный виджет. Я например подцепиил кнопку, но сделал ее нажимаемой иповесил на нее действие по раскрытию окна (то есть можно и кнопкой и кликом по иконке).
Код: Выделить всё
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)Суть в том, что надо потом к созданному виджет-актиону прицепить рандомный виджет. Я например подцепиил кнопку, но сделал ее нажимаемой иповесил на нее действие по раскрытию окна (то есть можно и кнопкой и кликом по иконке).
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
Darth Liksys писал(а): ↑13.09.2007 00:06Я пока у себя в проге сделал QAction и задизаблил его. Больше идей нету)))
1) Посмотри выше, я писал то же самое.
2) Установить этому QAction иконку, поменять шрифт, и будет то что надо. Только фона серенького не будет.
В дисгармонии со вселенной.
-
Liksys
- Сообщения: 2910
Re: Установка заголовка QMenu
Фишка в том, что серенький фон тоже надо))) Это надо через QWidgetAction.
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Установка заголовка QMenu
То-есть этот заголовок нужно сделать средствами QAction+QWidgetAction?
-
Assuri
- Сообщения: 678
- Статус: #include <brain.h>
- ОС: Fedora 12
Re: Установка заголовка QMenu
А как у QWidget установить фон в виде изображения?
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: Установка заголовка QMenu
Код: Выделить всё
void QLabel::setPicture ( const QPicture & picture )
void QLabel::setPixmap ( const QPixmap & )А QLabel в свою очередь наследник от QWidget...
Я так понимаю, меняться оно не должно, так что делаем фон сразу со значком проги и с надписью.
Либо на QWidget::paintEvent() нарисовать и фон и надпись, может заодно и полезную инфу(меняющуюся) тогда выводить.
В дисгармонии со вселенной.