Q维吉特"access violation"

QWidget "access violation" exeption

本文关键字:access violation      更新时间:2023-10-16

a具有从qwidget和ui_form继承的类(自动生成的类,当您在qt中创建.UI时出现)。看起来像

class MyClass: public QWidget, public Ui_Form {}

ui_form有一些成员,这些成员与.UI文件中的相关小部件连接(例如,qlineedits,qbuttons等)。

class Ui_Form {
public:
QLineEdit *fileNameEdit;
    void setupUi(QWidget *Form) {
    fileNameEdit = new QLineEdit(layoutWidget);
    fileNameEdit->setObjectName(QStringLiteral("fileNameEdit"));
    }
}

由于MyClass是从UI_Form继承的,因此我可以使用此Membes。但是,当我尝试做某事时,我会有一个"访问侵犯地点"。例如:

fileNameEdit->setText("String");

有人可以提供建议吗?

您合并Ui_Form部分的方式不是QT默认提出的方式。如果您查看此按钮示例,则可以查看UI部分的合并方式:

标题文件

#ifndef BUTTON_H
#define BUTTON_H
#include <QWidget>
namespace Ui {
class Button;
}
class Button : public QWidget
{
    Q_OBJECT
public:
    explicit Button(int n, QWidget *parent = 0);
    ~Button();
private slots:
    void removeRequested();
signals:
    void remove(Button* button);
private:
    Ui::Button *ui;
};
#endif // BUTTON_H

CPP代码

#include "button.h"
#include "ui_button.h"
Button::Button(int n, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Button)
{
    ui->setupUi(this);
    ui->pushButton->setText("Remove button "+QString::number(n));
    addAction(ui->actionRemove);
    connect(ui->actionRemove,SIGNAL(triggered()),this,SLOT(removeRequested()));
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(removeRequested()));
}
Button::~Button()
{
    delete ui;
}
void Button::removeRequested()
{
    emit remove(this);
}

主要区别是我相信您没有调用Ui_From::setupUi功能。对我来说,很明显,您不需要遵循QT建议的模板(将UI作为类成员而不是从中纳入QT),但是,从我的角度来看,如果您遵循QT建议。<<<<<<<<<<<<<<