我对 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/