首页 > 解决方案 > 单击按钮时调用对象函数

问题描述

我是 Qt 的新手。我在将 Qt 小部件与 C++ 对象连接时遇到问题

主文件

#include "mainwindow.h"
#include <QApplication>
#include <DBMS.h>

int main(int argc, char *argv[])
{
    DBMS dbms;
    
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QInputDialog"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->stackedWidget->addWidget(&create_DB_Frm);
    ui->stackedWidget->addWidget(&select_DB_Frm);
    ui->stackedWidget->addWidget(&delete_DB_Frm);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::on_CreateNewDatabase_clicked()
{
    QInputDialog inputDialog;
    QString dbName = inputDialog.getText(this, "Database Name", "Provide name for your database");
    //Right here i want to call dbms objec, which i define in main.cpp and call it function
//like : dbms.addDatabase(dbNames);
}

数据库管理系统.cpp

#include <DBMS.h>

DBMS::DBMS()
{

}

void DBMS::addName(QString strName)
{
    str.push_back(strName);
}

DBMS::~DBMS()
{

}

数据库管理系统.h

#ifndef DBMS_H
#define DBMS_H
#include <QString>
#include <vector>

class DBMS
{
public :
    DBMS();
    void addName(QString);
    ~DBMS();
private:
    std::vector <QString> str;
};



#endif // DBMS_H

我的问题是:当我单击 CreateNewDatabase 按钮​​(在 Qt 设计器中创建 CreateNewDatabase 按钮​​)时,如何从 DBMS.cpp 调用函数 ```addDatabase(Qstring)``

我认为它必须与信号和插槽有关,但我一直在网上搜索,没有找到明确的答案

标签: c++qtuser-interface

解决方案


这不是有人可以告诉你答案的,你需要了解信号/槽机制在 Qt 中是如何工作的。

例如,您的 DBMS 类必须从 QObject 派生。

在 Qt 助手的索引部分搜索这个术语:Q_OBJECT

然后阅读本节中的一些链接:另请参阅元对象系统、信号和插槽以及 Qt 的属性系统。


推荐阅读