Qt открыть диалог из главного окна - PullRequest
0 голосов
/ 14 мая 2018

Итак, я новичок в Qt и пытаюсь создать простой проект.У меня есть MainWindow с некоторыми кнопками и другими материалами, которые я создал с помощью Qt Designer, и как только я нажимаю одну из этих кнопок (она называется newBook), мне нужно открыть другой диалог.

Я искалдля некоторых решений люди использовали опции «Перейти к слоту ...», которые не предусмотрены моей Visual Studio.Поэтому я попытался создать свою собственную функцию.

Имя MainWindow - projekt2, диалоговое окно, которое я хочу открыть, называется addBook.

projekt2.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_projekt2.h"

class projekt2 : public QMainWindow
{
    Q_OBJECT

public:
    projekt2(QWidget *parent = Q_NULLPTR);


private:
    Ui::projekt2Class ui;

protected slots:
    void projekt2::on_newBook_clicked();
};

projekt2.cpp

#include "stdafx.h"
#include "projekt2.h"
#include "addbook.h"

projekt2::projekt2(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
}

void projekt2::on_newBook_clicked()
{
    addBook book(this);
    book.setModal(true);
    book.exec();
}

addbook.h

#pragma once

#include <QDialog>
#include "ui_addbook.h"

class addBook : public QDialog
{
    Q_OBJECT

public:
    addBook(QWidget *parent = Q_NULLPTR);
    ~addBook();

private:
    Ui::addBook ui;
};

addbook.cpp

#include "stdafx.h"
#include "addbook.h"

addBook::addBook(QWidget *parent)
    : QDialog(parent)
{
    ui.setupUi(this);
}

addBook::~addBook()
{
}

Когда я запускаю это, ошибок нет.Мое главное окно открывается, но когда я нажимаю кнопку, ничего не происходит.Я уверен, что что-то упускаю, например связь, но я не могу понять.

Я прошу прощения за тривиальный вопрос, но я немного расстроен.Спасибо за ваше терпение.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Попробуйте это:

#include "stdafx.h"
#include "projekt2.h"
#include "addbook.h"

projekt2::projekt2(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    connect(ui.newBook,SIGNAL(clicked(),this,SLOT(on_newBook_clicked()));
}

void projekt2::on_newBook_clicked()
{
    addBook *book;
    book = new addBook(this)
    book->setModal(true);
    book->show();
}
0 голосов
/ 14 мая 2018

Система сигналов / слотов Qt имеет несколько способов выполнения соединений.Одним из них является автоматическое соединение, основанное на сопоставлении имени виджета и сигнала, когда слот следует следующему соглашению об именах: «on_» + widgetName + «_» + signalName ();

Но для этого нужнодля работы вам нужно передать метакомпилятору Qt правильно сформированные заголовочные файлы, поэтому удалите префикс 'projekt2 ::' из объявления слота on_newButton_clicked ().

Вы также можете явно подключить сигналы / слоты, используя Qtconnect();проверьте эту ссылку , чтобы узнать больше об этом.connect() должен быть вашим стандартным способом сделать это, поскольку автоматическое соединение, основанное на сопоставлении имен, может быть легко нарушено, переименовывая виджет, и метакомпилятор Qt или сам компилятор не будут жаловаться на это.

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