QPushButton下拉式選單(是否取消下拉三角,是否check)

GreenArrowMan發表於2016-04-22

給QPushButton新增選單的示例,前面已經有了三種方式:

Qt學習之給QPushButton新增選單ActionsContextMenu方法

Qt學習之給QPushButton新增選單CustomContextMenu方法

Qt學習之給QPushButton新增選單DefaultContextMenu方法

今天再提供一種方式,就是給QPushButton新增下拉式選單。類似於Combobox一樣。前面三種方式實現的都是游標在哪個位置,選單就在哪裡顯示。而下拉式選單隻在按鈕的下方顯示,同時會顯示下拉三角,效果如下:


要實現下拉選單,首先需要建立選單,動作以及按鈕本身,為了便於顯示效果,另外新增了兩個成員函式,用來對應當動作被觸發時,顯示不同的資訊:

m_menu = new QMenu(this);
	m_addAction = new QAction(m_menu);
	m_delAction = new QAction(m_menu);
	m_addAction->setText(QObject::tr("新增"));
	m_delAction->setText(QObject::tr("刪除"));
	m_menu->addAction(m_addAction);
	m_menu->addAction(m_delAction);
	connect(m_addAction, &QAction::triggered, this, &ButtonMenu::addFunc);
	connect(m_delAction, &QAction::triggered, this, &ButtonMenu::delFunc);

	m_pushButton = new QPushButton(this);
	m_pushButton->setText(QObject::tr("測試按鈕選單"));
	m_pushButton->setMenu(m_menu);//設定選單
void ButtonMenu::addFunc()
{
	qDebug() << "addFunc";
}

void ButtonMenu::delFunc()
{
	qDebug() << "delFunc";
}
編譯執行,出現了一個問題,漢字亂碼。


因為我是VS2013+Qt,所以解決亂碼問題在標頭檔案中新增一句話。

#pragma execution_character_set("utf-8")
對於按鈕上的下拉三角圖示,如果不需要的話,可以通過QSS來取消:
m_pushButton->setStyleSheet("QPushButton::menu-indicator{image:none;}");//不顯示下拉圖片

可以看到小三角不顯示了:


如果需要動作點選後,有明顯的指示,也就是狀態,如下:


只需要設定QAction可以check就可以了:

m_addAction->setCheckable(true);//是否可以check
	m_delAction->setCheckable(true);//是否可以check
最後,執行成功,點選對應的動作,可以看到控制檯輸出:



交流Q:1245178753
本文地址:http://blog.csdn.net/u011417605/article/details/51218493

原始碼下載:http://download.csdn.net/detail/u011417605/9499025

相關文章