Как вызвать созданную форму .ui design в Qt с событием button.clicked ()? - PullRequest
3 голосов
/ 17 декабря 2011

Я очень новичок в Qt, и я хотел бы спросить, как вызвать созданную форму конструктора .ui для связи с PushButton в MainWindow.

Что я сделал: 1. Создалновая форма дизайна .ui (щелкните Forms.right -> Добавить новый -> Форма Qt Designer) в текущий проект.2. Разработан диалог о созданной форме .ui.3. Сделайте слот PushButton.clicked () в MainWindow.

Для всех, кто занимался программированием в Qt, пожалуйста, помогите мне решить эту проблему, чтобы соединить PushButton с формой .ui, чтобы PushButton мог вызывать/ показать форму, созданную в .ui.

Спасибо за внимание.

Ответы [ 2 ]

4 голосов
/ 17 декабря 2011

Использование файлов .ui объясняется в документации Qt: http://doc.qt.io/archives/qt-4.7/designer-using-a-ui-file.html

Резюме: Самый простой способ обработки файла .ui - это запустить его через uic (компилятор интерфейса пользователя) во время компиляции. Это делается автоматически, если файл .ui включен в файл вашего проекта (.pro). («Добавить новый», вероятно, сделал это автоматически в вашем случае.) Тогда вам нужно только включить сгенерированный заголовочный файл C ++ в исходный файл. Его имя должно быть что-то вроде «ui_nameoftheoriginaluifile.hpp». Конечно, после этого вам нужно создать экземпляр формы, определенной в файле .hpp.

Отредактировано, чтобы добавить:

Есть несколько проблем с вашим кодом, начиная с его читабельности. Я не знаю, использовали ли вы ранее объектно-ориентированный язык, но очень простое правило в C ++ - начинать имена классов с заглавных букв, чтобы их было легче отличить от объектов и других переменных. Таким образом, имена классов должны быть «About», «Parent» и т. Д.

Ошибка компиляции вызвана использованием "about" вместо имени класса, фактически используемого в файле "ui_about.hpp" - "MainWindow". (Это определяется именем формы, которую вы использовали в файле .ui.)

Если вы используете Qt Creator: удерживайте нажатой клавишу Ctrl и щелкните по имени файла "ui_about.h" в директиве include. Это откроет его для проверки. Попробуйте выяснить, как это работает.

Вы также не определили функцию opDialog () как член класса «parent» в «parent.cpp», что вызывает другую ошибку во время компиляции.

Вы также не должны использовать QMainWindow для диалогового окна about. Предполагается, что QMainWindow является главным окном вашего приложения - его больше не должно быть.

Итак, о.ч:

namespace Ui {
    class MainWindow;
}

class about : public QMainWindow {
    Q_OBJECT
public:
    about(QWidget *parent = 0);
    ~about();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;
};

И начало about.cpp:

#include "about.h"
#include "ui_about.h"

about::about(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
1 голос
/ 28 декабря 2011

Мне очень жаль, сэр, если я могу просто ответить сейчас, после того, как долгое время не входил в систему, потому что я должен закончить свой проект распознавания лиц в моем колледже.Кстати, я решил свой вопрос после того, как перепробовал много «проб и ошибок», и теперь я могу сделать это хорошо.Я разместил свой проект для ответа «Как вызвать созданную .ui форму в Qt с помощью button.clicked ()?»в моем личном блоге.

Это ссылка на сообщение: http://hxr99.blogspot.com/2011/12/how-to-call-ui-design-form-with.html.Также есть ссылка на скачивание примера проекта для вызова окна.Возможно, это может помочь людям во всем мире, начинающим программирование на Qt.

Я очень благодарен вам за помощь в решении моей проблемы и извините, если мой английский не так хорош.Веселого Рождества и счастливого Нового года.:)

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