单击按钮时调用对象函数
Posted
技术标签:
【中文标题】单击按钮时调用对象函数【英文标题】: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 <QString>
而不是QStringList
有什么具体原因吗?
你的 DBMS 有一个函数 DBMS::addName()
,它应该被定义为一个可以用 signal/slot 模型调用的槽......为此你的 DBMS 也应该有 Q_OBJECT 宏,请注意,为了将QObject::connect()
信号发送到插槽,DBMS 对象应该在您的mainwindow
中已知。您可以在mainwidow
中创建 DBMS 对象..
【参考方案1】:
这不是别人可以告诉你答案的,你需要了解 Qt 中的信号/槽机制是如何工作的。
例如,您的 DBMS 类必须从 QObject 派生。
在 Qt 助手的索引部分搜索这个词:Q_OBJECT
然后阅读本节中的一些链接: 另请参阅元对象系统、信号和插槽以及 Qt 的属性系统。
【讨论】:
以上是关于单击按钮时调用对象函数的主要内容,如果未能解决你的问题,请参考以下文章