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. snapshot of UI, which requires action when I click on Interval button

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();
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top