Comment utiliser qAction sous-menu dans Qt
-
21-12-2019 - |
Question
Je veux mettre en œuvre des commandes simples comme un qDebug() lorsque je clique sur un sous-menu dans la mainwindow.Je faisais référence exemple de programme donné avec le Qt 5 IDE (...\Qt\Qt5.2.0\5.2.0\msvc2010\examples\widgets\mainwindows\menus
), et en l'utilisant, j'ai réussi à construire le code.Je ne reçois pas le temps de compilation ou de l'exécution des erreurs.
J'ai créé le mainwindow.interface utilisateur en utilisant le mode de conception.Il a un objet de la classe QAction appelé actionInterval.
Mais quand je clique dessus, rien ne se passe, je ne suis pas en mesure de mettre en œuvre la commande dans le vide de l'intervalle().Je suppose que je ne suis pas de la connexion.Ce qui me manque ici?Veuillez informer.
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();
}
La solution
void MainWindow::createActions()
{
ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images"));
connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval()));
}
Vous ne devriez pas besoin de cela ui->actionInterval = new QAction(tr("&Interval"), this);
ligne, la ui->setupUi()
poignées pour vous, alors il est peut-être entraîner une référence incorrecte ainsi, lorsque vous cliquez sur, c'est ne pas tirer correctement.