QT设计师:除MainWindow以外的其他窗口

Qt Designer: Edit other window than mainwindow

本文关键字:其他 窗口 MainWindow 设计师 QT      更新时间:2023-10-16

我有一个项目,该项目通过qt为用户提供GUI。我使用QT设计师(集成在QT创建者中)设计了它,现在我想添加另一个窗口以使用户更改设置。
AFAIK我必须使用QWidget来创建另一个窗口,现在我想知道如何在QT Designer中编辑此QWidget,因为我只能设计MainWindow。
我的代码看起来像这样:

mainwindow.hpp

namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
  Q_OBJECT
public:
  explicit MainWindow(QWidget *parent = 0);
  ~MainWindow();
private slots:
// various slot calls    
// action triggered when clicking an entry in the QMenu of mainwindow
void on_action_dummy();
private:
  Ui::MainWindow *ui;
  QWidget dummy;
};

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
MainWindow::~MainWindow()
{
    delete ui;
}
// various implementations of the slot calls in mainwindow.hpp
void MainWindow::on_action_dummy()
{
    dummy.show();
}

也许我需要自己的新窗口上的课程?QWindow是否适合此任务?

您需要添加新的UI文件以及标题/类。在QT Creator的"新文件"对话框中有一个选项(QT Designer表单类别的sidebar上的" QT"子类别下的类别)。然后,您将其打开,并在程序的入口点(int main())中像MainWindow一样实例化类。类似:

MySettingsDialog *dialog = new MySettingsDialog(this); 
dialog->show();

您需要小心如何实例化 - 确保对象离开当前范围时将生存(例如,如果您在类中的方法中使用指针,则使用指针将其调用)。另外,您如何显示/执行对话框可能会有所不同。通常是要进行阻止(模式)对话框而不是新的"窗口"时的情况。

编辑:要处理内存管理,您可以设置WA_DeleteOnClose属性:

dialog->setAttribute(Qt::WA_DeleteOnClose);