2011-01-24 16 views
5

He añadido una etiqueta como imagen (icono) a un widget en Qt. Quiero mostrar un menú emergente cuando el usuario hace clic (clic izquierdo o derecho) en la etiqueta. ¿Cómo puedo lograr esto? Por favor, ayuda ...Qt - Menú emergente

+1

¿Qué desea exactamente: un menú emergente cuando se solicita el menú contextual (clic derecho) o un menú emergente cada vez que se hace clic en la etiqueta, independientemente de que sea el botón izquierdo o derecho? –

Respuesta

6

Querrás configurar el ContextMenuPolicy del widget, luego conectar el evento customContextMenuRequested a alguna ranura que mostrará el menú.

Ver: Qt and context menu

4

Si desea mostrar un menú contextual cada vez que se hace clic en la etiqueta (con cualquier botón del ratón), supongo que tendrá que implementar su propia clase Label, heredando QLabel y gastos de la ventana emergente menú por ti mismo en caso de un evento de mouse.

Aquí es una versión muy simplificada (pero trabajando):

class Label : public QLabel 
{ 
public: 
    Label(QWidget* pParent=0, Qt::WindowFlags f=0) : QLabel(pParent, f) {}; 
    Label(const QString& text, QWidget* pParent = 0, Qt::WindowFlags f = 0) : QLabel(text, pParent, f){}; 

protected : 
    virtual void mouseReleaseEvent (QMouseEvent * ev) { 
     QMenu MyMenu(this); 
     MyMenu.addActions(this->actions()); 
     MyMenu.exec(ev->globalPos()); 
    } 
}; 

Esta clase especializada Label se mostrará en el menú emergente de todas las acciones añaden a ella. .

Digamos que la ventana principal de la aplicación se llama MainFrm y está mostrando la etiqueta (label Aquí es cómo se vería el constructor:

MainFrm::MainFrm(QWidget *parent) : MainFrm(parent), ui(new Ui::MainFrm) 
{ 
    ui->setupUi(this); 

    QAction* pAction1 = new QAction("foo", ui->label); 
    QAction* pAction2 = new QAction("bar", ui->label); 
    QAction* pAction3 = new QAction("test", ui->label); 
    ui->label->addAction(pAction1); 
    ui->label->addAction(pAction2); 
    ui->label->addAction(pAction3); 
    connect(pAction1, SIGNAL(triggered()), this, SLOT(onAction1())); 
    connect(pAction2, SIGNAL(triggered()), this, SLOT(onAction2())); 
    connect(pAction3, SIGNAL(triggered()), this, SLOT(onAction3())); 
} 
0

Si una etiqueta se puede hacer clic, es lógicamente una "Pruebas botón "y no una" etiqueta "más.

sugeriría a utilizar QToolButton lugar, y utilizar QSS para compensar el botón de herramienta a una etiqueta.

Cuestiones relacionadas