As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




7年前关闭。




下面,我将显示C++ GUI Programming with Qt 4书中应用程序的不同文件,并对它们有一些疑问。

main.cpp
#include <QApplication>
#include "gotocelldialog.h"
//#include <QDialog>
//#include "ui_gotocelldialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
//Ui::GoToCellDialog ui;
//QDialog *dialog = new QDialog;
GoToCellDialog *dialog = new GoToCellDialog;
//ui.setupUi(dialog);
dialog->show();
return app.exec();
}

gotocelldialog.h
#ifndef GOTOCELLDIALOG_H //Check if GOTOCELLDIALOG_H has not been defined previously
#define GOTOCELLDIALOG_H
#include <QDialog>
#include "ui_gotocelldialog.h"
class GoToCellDialog: public QDialog, public Ui::GoToCellDialog
{
Q_OBJECT
public:
GoToCellDialog(QWidget *parent = 0);
private slots:
void on_lineEdit_textChanged();
};
#endif

gotocelldialog.cpp
#include <QtGui>
#include "gotocelldialog.h"
GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)
{
setupUi(this); //this: reference to the current class
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");
QValidator *validator = new QRegExpValidator(regExp, this);
lineEdit->setValidator(validator);
connect(okButton, SIGNAL(clicked()),this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
}
void GoToCellDialog::on_lineEdit_textChanged()
{
okButton->setEnabled(lineEdit->hasAcceptableInput());
}

1-将GoToCellDialog(QWidget *parent = 0);放入 gotocelldialog.h 有什么用,特别是它不允许任何 parent 通过?

2-在 main.cpp 中,带注释的代码ui.setupUi(dialog);明确显示我要设置对话框的ui。但是,在 gotocelldialog.cpp 中,您将看到setupUi(this);,而无需确定要设置当前对象的ui。在这里如何使用?而且,在这种情况下,设置用户界面意味着什么?

3-在 gotocelldialog.cpp 中,这行是什么意思? GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)。我不清楚我们如何在这里过 parent 。我们如何从这条线中确定父级?

4-在 gotocelldialog.cpp 中,还有另一种编写此行的方法:GoToCellDialog::GoToCellDialog(QWidget *parent): QDialog(parent)吗?而且,如果我们删除构造函数,该如何编写呢?它可以仅以GoToCellDialog {...}开头吗?

非常感谢您的努力。

最佳答案

对于1):这是基本的C++语法。这是默认参数。这样就可以在不传入指针的情况下调用构造函数,在这种情况下将替换0(即NULL)。

对于2):请阅读关于UI文件的Qt文档。在那里解释。 (http://doc.qt.nokia.com/latest/designer-using-a-ui-file.html)(其含义:请阅读先前问题的答案,uic 生成的代码,然后阅读docs )。

对于3):再次,这是基本的C++。它使用parent作为参数调用父类(super class)的构造函数。

对于4):不,您无法以任何方式编写C++。语法很严格,您必须遵循它。

请在Internet上搜索C++信息和教程,那里有数百本很好的引用书。

关于c++ - Qt-事情如何协同工作? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5693115/

10-12 02:46