有一个类,继承自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,我可以使用这个元素。但是,当我尝试做某事时,我有一个例外"访问违规阅读位置"。例如:
fileNameEdit->setText("String");
有人可以提出建议吗?
答案 0 :(得分:1)
您合并Ui_Form
部分的方式不是默认情况下的Qt proposes。如果您查看这个button example,您可以看到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建议,我的观点会更加清楚。< / p>