Как да използвате подменюто qAction в Qt

Искам да внедря прости команди като qDebug(), когато щракна върху подменю в главния прозорец. Имах предвид примерна програма, дадена заедно с Qt 5 IDE (...\Qt\Qt5.2.0\5.2.0\msvc2010\examples\widgets\mainwindows\menus), и използвайки я, успях да конструирам кода. Не получавам никакви грешки по време на компилиране или изпълнение.

Създадох mainwindow.ui, използвайки режима за проектиране. Той има обект от класа QAction, наречен actionInterval. моментна снимка на потребителския интерфейс, който изисква действие, когато щракна върху бутона Интервал

Но когато щракна върху него, нищо не се случва, не мога да изпълня командата в void interval(). Предполагам, че не се свързвам правилно. Какво ми липсва тук? Моля за съвет.

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();
}

person cappy0704    schedule 26.02.2014    source източник
comment
Подозирам, че вашето действие ui->actionInterval не е това, което е в менюто.   -  person vahancho    schedule 26.02.2014


Отговори (1)


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

Не трябва да имате нужда от този ui->actionInterval = new QAction(tr("&Interval"), this); ред, ui->setupUi() се справя с това вместо вас, така че потенциално причинява неправилна препратка, така че когато щракнете върху него, той не се задейства правилно.

person Nicholas Smith    schedule 26.02.2014