【问题标题】:Call object function when pushbbotton clicked单击按钮时调用对象函数
【发布时间】:2020-09-17 20:58:32
【问题描述】:

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

main.cpp

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

DBMS.cpp

#include <DBMS.h>

DBMS::DBMS()
{

}

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

DBMS::~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 按钮​​时,如何从 DBMS.cpp 调用函数 ```addDatabase(Qstring)`` (在 Qt 设计器中创建了 CreateNewDatabase 按钮​​)

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

【问题讨论】:

  • 使用std::vector &lt;QString&gt;而不是QStringList有什么具体原因吗?
  • 你的 DBMS 有一个函数 DBMS::addName() ,它应该被定义为一个可以用 signal/slot 模型调用的槽......为此你的 DBMS 也应该有 Q_OBJECT 宏,请注意,为了将QObject::connect() 信号发送到插槽,DBMS 对象应该在您的mainwindow 中已知。您可以在mainwidow 中创建 DBMS 对象..

标签: c++ qt user-interface


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2019-10-04
    • 2020-08-29
    相关资源
    最近更新 更多