QT开发中文网

使用Qt 的d指针和q指针用法 绘制弹窗

在用Qt编写弹窗(dialog)的过程中,使用d指针和q指针可以让代码更加安全和灵活。下面是一个简单的例子:

#include <QDialog>
#include <QPushButton>

class MyDialog : public QDialog {
public:
    explicit MyDialog(QWidget *parent = nullptr);

private:
    QPushButton *m_okButton;  // 指向确定按钮的q指针
    QPushButton *m_cancelButton;  // 指向取消按钮的q指针

private slots:
    void on_okButton_clicked();
    void on_cancelButton_clicked();
};

MyDialog::MyDialog(QWidget *parent) : QDialog(parent) {
    // 创建两个按钮,并放到水平布局中
    m_okButton = new QPushButton("OK", this);
    m_cancelButton = new QPushButton("Cancel", this);

    QHBoxLayout *buttonLayout = new QHBoxLayout(this);
    buttonLayout->addWidget(m_okButton);
    buttonLayout->addWidget(m_cancelButton);

    // 连接信号槽
    connect(m_okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked()));
    connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(on_cancelButton_clicked()));
}

void MyDialog::on_okButton_clicked() {
    // 处理确定按钮被点击后的逻辑
    accept();  // 关闭对话框并返回QDialog::Accepted
}

void MyDialog::on_cancelButton_clicked() {
    // 处理取消按钮被点击后的逻辑
    reject();  // 关闭对话框并返回QDialog::Rejected
}

在这个例子中,我们创建了一个继承自QDialog的MyDialog类,其中包含了两个QPushButton类型的q指针:m_okButton和m_cancelButton。我们使用这两个指针来访问“OK”和“Cancel”按钮,以便在后续的代码中对它们进行操作。

另外,我们还使用了accept()和reject()函数来关闭对话框并设置返回值。这两个函数在QDialog类中定义,可以方便地将对话框的结果传递给调用者。

需要注意的是,为了保证代码的安全性,我们还应该使用d指针来访问对话框的私有成员变量。例如,如果我们要在MyDialog类的构造函数中设置一些私有成员变量,可以使用以下方式:

MyDialog::MyDialog(QWidget *parent) : QDialog(parent), d_ptr(new MyDialogPrivate(this)) {
    Q_D(MyDialog);  // 定义d指针

    // 设置一些私有成员变量
    d->m_data = 42;
    d->m_foo = "bar";
}

在这段代码中,我们首先创建一个名为d_ptr的指向MyDialogPrivate类的d指针,并在构造函数中使用new运算符对其进行初始化。然后,在构造函数的最后一行,我们使用Q_D宏来定义d指针,并通过d指针来访问私有成员变量。这样做的好处是,即使在MyDialogPrivate类的实现发生变化时,也不会影响到MyDialog类的接口,从而提高了代码的可维护性和扩展性。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1267

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?