Cómo utilizar qAction submenú en Qt
-
21-12-2019 - |
Pregunta
Quiero implementar órdenes simples como un qDebug() cuando hago clic en un sub-menú en la ventana principal.Me estaba refiriendo a programa de ejemplo se administra junto con la Qt 5 IDE (...\Qt\Qt5.2.0\5.2.0\msvc2010\examples\widgets\mainwindows\menus
), y su uso, me las arreglé para construir el código.No recibo ningún tiempo de compilación o en tiempo de ejecución errores.
He creado la ventana principal.interfaz de usuario usando el modo de diseño.Tiene un objeto de la QAction clase llamada actionInterval.
Pero cuando hago clic en él, no pasa nada, no soy capaz de ejecutar el comando en el vacío en el intervalo().Supongo que no soy la conexión correctamente.Lo que me estoy perdiendo aquí?Por favor avise.
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void createActions();
private slots:
void interval();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createActions();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createActions()
{
ui->actionInterval = new QAction(tr("&Interval"), this);
ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images"));
connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval()));
}
void MainWindow::interval()
{
qDebug()<<"inside interval qdialog";
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Solución
void MainWindow::createActions()
{
ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images"));
connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval()));
}
No debe necesitar esa línea de ui->actionInterval = new QAction(tr("&Interval"), this);
, el ui->setupUi()
se maneja que para usted, por lo que potencialmente está causando una referencia incorrecta, por lo que cuando haga clic en él, no está disparando correctamente.