c++ - 按钮 onClick 的工作原理

标签 c++ qt qtgui

我对 Qt 的 onClick 处理有点困惑。我有一个看起来像这样的类:

class DatabaseManager : public QObject
{
Q_OBJECT;
private:
    QSqlDatabase db;

public slots: 
    bool openDB(const QString& path);

};

我有一个处理按钮点击的类:

Click::Click(QWidget *parent) : QWidget(parent){
    QPushButton *create = new QPushButton("Create database", this);
    create->setGeometry(50,100,100,100);
    connect(create, SIGNAL(clicked()), this, SLOT(openDB("/home/peter/database.db")));
}

主要.cpp

int main(int argc,char **argv){
    QApplication *app = new QApplication(argc, argv);
    QPushButton btn;

    DatabaseManager db;
    btn.move(300,300);
    btn.resize(250,250);
    btn.setWindowTitle("Dibli");
    btn.show();
    return app->exec();
}

我如何告诉点击处理程序我想使用特定 DatabaseManager 对象的 openDB 函数?因为它不会创建文件,所以如果我单击它。

我已经更新了代码。

最佳答案

假设您的 Click 类派生自 QObject,您应该添加一个插槽

public slots:
 void onClick() { openDB("/home/peter/database.db"); }

并连接:

connect(create, SIGNAL(clicked()), this, SLOT(onClick()))

编辑 由于您现在显示更多代码,这里有一个不同的提示。改变主要喜欢

int main(int argc,char **argv){
    QApplication *app = new QApplication(argc, argv);
    QPushButton btn;

    DatabaseManager db;
    db.path = "/home/peter/database.db";
    QObject::connect(&btn, SIGNAL(clicked()), &db, SLOT(openDB()));

    btn.move(300,300);
    btn.resize(250,250);
    btn.setWindowTitle("Dibli");
    btn.show();

    return app->exec();
}

class DatabaseManager : public QObject
{
Q_OBJECT;
private:
    QSqlDatabase db;

public:
    QString path;

public slots: 
    bool openDB();

};

请注意,我向 DatabaseManager 添加了一个成员变量 (db.path),并更改了插槽 openDB 并删除了参数。 那是因为按钮的信号不能提供字符串。更简单的方法是在类里面提供它。

关于c++ - 按钮 onClick 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898615/

相关文章:

c++ - 多参数构造函数上的显式关键字?

c++ - std::find 在 glm::vec3 的 vector 中不起作用(OpenGLTriangle 法线具有折角)

c++ - 在同一个文件中实现多个窗口的功能?

qt - QTcpSocket 以及插槽和信号的运行时错误

c++ - QOpenGLFunctions 缺少重要的 OpenGL 函数

c++ - Qt 使用 Ui 文件和 QUiLoader

c++ - 为什么 GCC 和 Clang 不做这种别名优化?

python-3.x - PySide2 和 pyinstaller gui 应用程序无法在某些 Windows 计算机上运行

c++ - Qt 自动生成的表单提供了错误的源代码文件路径

c++ - 类的未解析外部符号?