Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QMenu внутри QToolBar

Автор: fortero 20.7.2011, 20:31

Добрый вечер!
Не как не могу додуматься как мне внедрить меню в панель инструментов, нужно что бы выскакивало меню по нажатию кнопки в панели инструментов. Вот что имею, как допилить помогите пожалуйста:

QToolBar *TableCl::createMenuBar(){
    QToolBar *toolEdit = new QToolBar(this);

        QPixmap pix(32, 32);//Тестовый код
        pix.fill(Qt::green);//
        QPixmap pix2(32, 32);
        pix2.fill(Qt::darkBlue);
        QPixmap pix3(32, 32);
        pix3.fill(Qt::red);
        
    toolEdit->addSeparator();
    toolEdit->addAction(QIcon(":/img/add.png"), tr("Добавить запись в базу \"Клавиша Insert\""), this, SLOT(addSkIt_slot()));
    toolEdit->addAction(QIcon(":/img/edit.png"), tr("Редактировать запись \"Клавиша Enter\""), this, SLOT(editBarBut_slot()));
    toolEdit->addAction(QIcon(":/img/del.png"), tr("Удалить запись \"Клавиша Delete\""), this, SLOT(delete_slot()));
    toolEdit->addSeparator();
    toolEdit->addAction(pix, tr("Обновить таблицу"), this, SLOT(refresh_slot()));
    toolEdit->addAction(pix2, tr("Поиск"), this, SLOT(finds_slot()));
    toolEdit->addSeparator();
    //toolEdit->addAction(); Как тут прописать код???
    toolEdit->addSeparator();
    return toolEdit;
}

Спасибо за внимание!

Автор: RazrFalcon 20.7.2011, 21:05

Вам нужна кнопка в QMenuBar?

Автор: fortero 20.7.2011, 21:11

Цитата(RazrFalcon @ 20.7.2011, 21:05) *
Вам нужна кнопка в QMenuBar?

Вот такого типа меню внутри панели инструментов:


Автор: RazrFalcon 20.7.2011, 21:45

void QAction::setMenu ( QMenu * menu )
Оно?

Автор: fortero 20.7.2011, 21:48

Цитата(RazrFalcon @ 20.7.2011, 21:45) *
void QPushButton::setMenu ( QMenu * menu )
Оно?

Оно то оно, но как мне QPushButton поместить в
toolEdit->addAction(); Как тут прописать код???

Автор: mks 20.7.2011, 22:10

fortero смотри вложение, оно ?
 PopUp_menu.zip ( 4.57 килобайт ) : 226

Автор: fortero 20.7.2011, 22:19

Цитата(mks @ 20.7.2011, 22:10) *
fortero смотри вложение, оно ?
 PopUp_menu.zip ( 4.57 килобайт ) : 226

Нет не так, как на скрине кнопочка из панели инструментов которая при нажатии делает небольшое меню...

Автор: mks 20.7.2011, 22:31

Ну так и есть, у меня тоже кнопочка на панели инструментов которая при нажатии создаёт меню из одного действия? Что смущает, что там один пункт ? Или что на кнопочки нет картинки ?

Автор: fortero 20.7.2011, 22:33

Цитата(mks @ 20.7.2011, 22:31) *
Ну так и есть, у меня тоже кнопочка на панели инструментов которая при нажатии создаёт меню из одного действия? Что смущает, что там один пункт ? Или что на кнопочки нет картинки ?

Ой блин, извеняюсь, я протупил я подумал что это менюшная кнопка а не инструментальная. А как в коде сделать так как у Вас?

Автор: mks 20.7.2011, 22:41

Делать наверно можно как угодно, я просто идею показал, раньше ничего подобного не делал :) Мне думается что главное правильно рассчитать точку вывода меню относительно кнопки.

Автор: fortero 20.7.2011, 22:51

Цитата(mks @ 20.7.2011, 22:41) *
Делать наверно можно как угодно, я просто идею показал, раньше ничего подобного не делал :) Мне думается что главное правильно рассчитать точку вывода меню относительно кнопки.

Помогите пожалуйста, вот кусочик кода отвечающий за панели инструментов, нужно ещё одну кнопочку привентить с минюшкой:
QToolBar *TableCl::createMenuBar(){
    QToolBar *toolEdit = new QToolBar(this);

        QPixmap pix(32, 32);//Тестовый код
        pix.fill(Qt::green);//
        QPixmap pix2(32, 32);
        pix2.fill(Qt::darkBlue);
        QPixmap pix3(32, 32);
        pix3.fill(Qt::red);
        
    toolEdit->addSeparator();
    toolEdit->addAction(QIcon(":/img/add.png"), tr("Добавить запись в базу \"Клавиша Insert\""), this, SLOT(addSkIt_slot()));
    toolEdit->addAction(QIcon(":/img/edit.png"), tr("Редактировать запись \"Клавиша Enter\""), this, SLOT(editBarBut_slot()));
    toolEdit->addAction(QIcon(":/img/del.png"), tr("Удалить запись \"Клавиша Delete\""), this, SLOT(delete_slot()));
    toolEdit->addSeparator();
    toolEdit->addAction(pix, tr("Обновить таблицу"), this, SLOT(refresh_slot()));
    toolEdit->addAction(pix2, tr("Поиск"), this, SLOT(finds_slot()));
    toolEdit->addSeparator();
    //toolEdit->addAction(Как тут прописать код для кнопки меню???);
    toolEdit->addSeparator();
    return toolEdit;
}

Автор: mks 20.7.2011, 23:31

QToolBar *TableCl::createMenuBar(){
    QToolBar *toolEdit = new QToolBar(this);

        QPixmap pix(32, 32);//Тестовый код
        pix.fill(Qt::green);//
        QPixmap pix2(32, 32);
        pix2.fill(Qt::darkBlue);
        QPixmap pix3(32, 32);
        pix3.fill(Qt::red);
        
    toolEdit->addSeparator();
    toolEdit->addAction(QIcon(":/img/add.png"), tr("Добавить запись в базу \"Клавиша Insert\""), this, SLOT(addSkIt_slot()));
    toolEdit->addAction(QIcon(":/img/edit.png"), tr("Редактировать запись \"Клавиша Enter\""), this, SLOT(editBarBut_slot()));
    toolEdit->addAction(QIcon(":/img/del.png"), tr("Удалить запись \"Клавиша Delete\""), this, SLOT(delete_slot()));
    toolEdit->addSeparator();
    toolEdit->addAction(pix, tr("Обновить таблицу"), this, SLOT(refresh_slot()));
    toolEdit->addAction(pix2, tr("Поиск"), this, SLOT(finds_slot()));
    toolEdit->addSeparator();
    // прописать как то так:
    toolEdit->addAction(QIcon(":/img/popupmenu.png"), tr("вызвать меню"), this, SLOT(showPopUpmenu_slot()));
    toolEdit->addSeparator();
    return toolEdit;
}
в этом же объекте прописать слот реакции:
void TableCl::showPopUpmenu_slot()
{
  menu->popup(this->mapToGlobal(QPoint(2,20)),0);
}

и в конструкторе TableCl что то типа такого:
  
  popupMenuAction = new QAction(QString("action"),this);
  menu = new QMenu(QString("title"),this);
  menu->addAction(popupMenuAction);
  connect(popupMenuAction,SIGNAL(triggered()),this,SLOT(popupSlot()));

popupSlot() тоже прописать либо в этом же классе либо в каком то другом. И не забыть прописать в классе переменные popupMenuAction и menu. Вроде всё подробно написал :)

Автор: Litkevich Yuriy 20.7.2011, 23:49

Мужики, хватит извращатся

Цитата(fortero @ 21.7.2011, 0:11) *
Вот такого типа меню внутри панели инструментов:
Это просто вложеные меню (точнее QAction), когда есть вложения, кнопка на панели инструментов сама себя так ведёт.

П.С.
Вы почему такие не любопытные (читай скушные), есть же примеры и демки в Qt, их первым делом пощупать надо было.
%QTDIR%\demos\mainwindow


Автор: fortero 21.7.2011, 0:55

Цитата(Litkevich Yuriy @ 20.7.2011, 23:49) *
Мужики, хватит извращатся
Цитата(fortero @ 21.7.2011, 0:11) *
Вот такого типа меню внутри панели инструментов:
Это просто вложеные меню (точнее QAction), когда есть вложения, кнопка на панели инструментов сама себя так ведёт.

П.С.
Вы почему такие не любопытные (читай скушные), есть же примеры и демки в Qt, их первым делом пощупать надо было.
%QTDIR%\demos\mainwindow



А как данный пример к моему коду пристековать, голова уже не варит(

Автор: fortero 21.7.2011, 1:26

Кажется решил, что то вроде этого:

QToolBar *TableCl::createMenuBar(){
    QToolBar *toolEdit = new QToolBar(this);

        QPixmap pix(32, 32);//Тестовый код
        pix.fill(Qt::green);//
        QPixmap pix2(32, 32);
        pix2.fill(Qt::darkBlue);
        QPixmap pix3(32, 32);
        pix3.fill(Qt::red);
        
        QMenu *menu = new QMenu("One", toolEdit);
        menu->setIcon(pix3);
        menu->addAction("A");
        menu->addAction("B");
        menu->addAction("C");

        
    toolEdit->addSeparator();
    toolEdit->addAction(QIcon(":/img/add.png"), tr("Добавить запись в базу \"Клавиша Insert\""), this, SLOT(addSkIt_slot()));
    toolEdit->addAction(QIcon(":/img/edit.png"), tr("Редактировать запись \"Клавиша Enter\""), this, SLOT(editBarBut_slot()));
    toolEdit->addAction(QIcon(":/img/del.png"), tr("Удалить запись \"Клавиша Delete\""), this, SLOT(delete_slot()));
    toolEdit->addSeparator();
    toolEdit->addAction(pix, tr("Обновить таблицу"), this, SLOT(refresh_slot()));
    toolEdit->addAction(pix2, tr("Поиск"), this, SLOT(finds_slot()));
    toolEdit->addSeparator();
    toolEdit->addAction(menu->menuAction());
    toolEdit->addSeparator();
    
    
    return toolEdit;
}


Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)