Qt разница между указателями классов - PullRequest
0 голосов
/ 26 сентября 2018

Я только начал изучать Qt, и есть некоторые вещи, которые я не понимаю.Поэтому я создал приложение-виджет от создателя, а фреймворк создал заголовок и файл cpp для MainWindow.

Заголовочный файл

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLayout>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:


private:
    Ui::MainWindow *ui;
    QLayout *aLayout;
    QLayout *bLayout;
};

#endif // MAINWINDOW_H

Cpp файл

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->...
}

MainWindow::~MainWindow()
{
    delete ui;
}

Мой вопрос - в чем разница между объектами, указанными ui, созданными конструктором, и this, используемыми в одном конструкторе.Кроме того, почему я не могу получить доступ к членам MainWindow по указателю ui?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Ваш член 'ui' имеет тип Ui :: MainWindow - это класс, который был сгенерирован из вашей формы.Этот класс генерируется UIC.http://doc.qt.io/Qt-5/uic.html

указатель 'this' - это указатель на текущий класс, в вашем случае он имеет тип MainWindow.

Ui :: MainWindow и MainWindow не совпадают.Если вы хотите получить доступ к кнопке, созданной Qt Designer - используйте член 'ui', а не указатель 'this'.

Возможно, эта ссылка поможет вам http://doc.qt.io/Qt-5/designer-using-a-ui-file.html

0 голосов
/ 26 сентября 2018

Когда вы создаете виджет в Qt, возникает некоторая магия (если все настроено красиво, что было бы в случае использования шаблона).Qt сгенерирует класс ui из отредактированного вами файла .ui.Этот класс содержит все виджеты, которые вы добавили в конструктор.( подробности см. В ответе Армана )

Указатель this - это базовая концепция C ++, в которой вы работаете. Вы можете написать this->ui-> setupUi (this) `например.

Если вы не можете получить доступ к виджетам, которые вы создали с помощью ui, это может означать, что вы сначала должны скомпилировать, чтобы Qt мог творить чудеса.Если вы уже сделали это, это может означать, что что-то стало фальшивым, в чем я очень сомневаюсь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...