Qt自动连接操作

Qt AutoConnect actions

本文关键字:操作 连接 Qt      更新时间:2023-10-16

我使用qt设计器创建了一个表单,并使用objectName actionEmployeeWin创建了QAction,我想使用qt的自动连接功能,但它不起作用

main_win.cpp

#include "main_win.h"
#include "ui_mainwindow.h"
#include "employe_win.h"
#include <QSettings>
#include <QTextEdit>
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    empWin(nullptr), providerWin(nullptr)
{
    // setting up ui and loading last geometry
    ui->setupUi(this);
    QSettings settings;
    restoreGeometry(settings.value("MAINWINDOW/GEOMETRY").toByteArray());
    restoreState(settings.value("MAINWINDOW/WINSTATE").toByteArray());
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::closeEvent(QCloseEvent *evt) {
    QSettings appSetting;
    appSetting.setValue("MAINWINDOW/GEOMETRY", saveGeometry());
    appSetting.setValue("MAINWINDOW/WINSTATE", saveState());
    QMainWindow::closeEvent(evt);
}
void MainWindow::on_actionEmployeeWin_triggered(bool checked)
{
    std::cout << "working"; // do not show
}

main_win.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "employe_win.h"
#include "provider_win.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void closeEvent(QCloseEvent *evt);
    void on_actionEmployeeWin_triggered(bool checked);
private:
    void createMenu();
    Ui::MainWindow *ui;
    EmployeeWindow *empWin;
    ProviderWindow *providerWin;
};
#endif // MAINWINDOW_H

您需要从Ui表单继承才能使用自动连接功能。

请参见此处:http://doc.qt.io/qt-5/qtuitools-multipleinheritance-example.html

注意:我通常不建议依赖自动连接功能,只是因为这样的问题。自动连接是非显式的,它们的问题很难调试。QMetaObject的魔力太多了,不合我的口味。