Frage

Ich möchte einfache Befehle wie qDebug() implementieren, wenn ich im Hauptfenster auf ein Untermenü klicke.Ich bezog mich auf ein Beispielprogramm, das zusammen mit der Qt 5-IDE bereitgestellt wurde (...\Qt\Qt5.2.0\5.2.0\msvc2010\examples\widgets\mainwindows\menus), und damit ist es mir gelungen, den Code zu erstellen.Ich erhalte keine Kompilierungs- oder Laufzeitfehler.

Ich habe die mainwindow.ui im ​​Designmodus erstellt.Es verfügt über ein Objekt der QAction-Klasse namens actionInterval. snapshot of UI, which requires action when I click on Interval button

Aber wenn ich darauf klicke, passiert nichts, ich kann den Befehl nicht in void Interval() implementieren.Ich schätze, ich verbinde mich nicht richtig.Was fehlt mir hier?Bitte beraten.

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();
}
War es hilfreich?

Lösung

void MainWindow::createActions()
{
    ui->actionInterval->setStatusTip(tr("Set the interval for capturing delta & reference images"));
    connect(ui->actionInterval, SIGNAL(triggered()), this, SLOT(interval()));
}

Das solltest du nicht brauchen ui->actionInterval = new QAction(tr("&Interval"), this); Linie, die ui->setupUi() erledigt das für Sie, daher führt es möglicherweise zu einer falschen Referenz, sodass sie nicht richtig ausgelöst wird, wenn Sie darauf klicken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top