从主窗口打开对话框

问题描述 投票:0回答:3

我有一个主窗口,其中包含一些按钮和我使用 Qt Designer 创建的内容,一旦我单击其中一个按钮(其名称为 newBook),我需要打开另一个对话框。

我正在寻找一些解决方案,人们正在使用“转到插槽...”选项,而我的 Visual Studio 不提供该选项。所以我尝试创建自己的函数。

MainWindow 的名称为 projekt2,我要打开的 Dialog 名为 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()
{
}

当我运行它时,没有错误。我的主窗口打开,但是当我单击按钮时,没有任何反应。我确信我错过了一些东西,比如连接,但我无法弄清楚。

c++ qt
3个回答
1
投票

试试这个,这对我有用

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

0
投票

Qt 信号/槽系统有多种方式来执行连接。其中之一是当插槽遵循此命名约定时,基于匹配小部件名称和信号的自动连接: "on_" + widgetName + "_" + signalName ();

但是要使其工作,您必须向 Qt 元编译器提供格式良好的头文件,因此请从 on_newButton_clicked() 插槽的声明中删除“projekt2::”前缀。

您还可以使用 Qt 显式连接信号/槽

connect()
;检查此链接以了解更多信息。
connect()
应该是您执行此操作的默认方式,因为基于名称匹配的自动连接很容易被重命名小部件所破坏,并且 Qt 元编译器或编译器本身不会抱怨它。


0
投票
#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();
}
© www.soinside.com 2019 - 2024. All rights reserved.