1. 程式人生 > >QT控制元件提升之QPushButton提升為QMenu

QT控制元件提升之QPushButton提升為QMenu

當一個控制元件進行提升之後, 就有了新的功能, 在原來的一些特性基礎上,發生一些新的改變。

QT控制元件提升方法:

1.需要寫一個需要提升為某種功能的類。

2.開啟qt設計師, 在對應需要提升的控制元件, 單擊右鍵, 選擇 “提升的視窗部件” , 在提升的類名和標頭檔案輸入框裡, 分別填上你所寫的類, 單擊提升銨紐進行提升。


我這邊進行了按鈕提升為選單, 部分原始碼如下:

//

popupbutton.cpp檔案
#include"popupbutton.h"
#include<QDebug>
PopupButton::PopupButton(QWidget*parent):
QPushButton(parent)
{
m_menu=newQMenu(this);
connect(this,SIGNAL(clicked()),this,SLOT(popupMenu()));
}
PopupButton::~PopupButton()
{
}
QMenu*PopupButton::getMenu()
{
returnm_menu;
}
voidPopupButton::popupMenu()
{
QPointpos;
inty=pos.y();
pos.setY(y+this->geometry().height());
m_menu->exec(this
->mapToGlobal(pos));
}
//
widget.cpp檔案

#include"widget.h"
#include"ui_widget.h"
#include<QMenu>
#include<QMessageBox>
Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
initMenuButton();
}
Widget::~Widget()
{
deleteui;
}
voidWidget::initMenuButton()
{
QMenu*menu=ui->pushButton->getMenu();
QAction*nameAction=newQAction(QLatin1String("Name"),this);
QAction*ageAction=newQAction(QLatin1String("Age"),this);
menu->addAction(nameAction);
menu->addAction(ageAction);
connect(nameAction,SIGNAL(triggered()),this,SLOT(slotNameAction()));
connect(ageAction,SIGNAL(triggered()),this,SLOT(slotAgeAction()));
QMenu*childMenu=menu->addMenu(QLatin1String("childmenu"));
QAction*fiveYearOldAction=newQAction(QLatin1String("5"),this);
QAction*tenTearOldAction=newQAction(QLatin1String("10"),this);
childMenu->addAction(fiveYearOldAction);
childMenu->addAction(tenTearOldAction);
}
voidWidget::slotNameAction()
{
QMessageBox::information(this,QLatin1String("test"),QLatin1String("Youareclickednameaction!"));
}
voidWidget::slotAgeAction()
{
QMessageBox::information(this,QLatin1String("test"),QLatin1String("Youareclickedageaction!"));
}