Qt Designer:编辑除主窗口之外的其他窗口

时间:2014-01-22 22:14:59

标签: c++ qt user-interface window qwidget

我有一个项目,通过Qt为用户提供GUI。我使用Qt Designer(集成在Qt Creator中)设计了它,现在我想添加另一个窗口以便让用户更改设置。
Afaik我必须使用QWidget来创建另一个窗口,现在我想知道如何在Qt Designer中编辑这个QWidget,因为我只能设计主窗口。
我的代码如下所示:

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甚至是这个任务的合适类吗?

1 个答案:

答案 0 :(得分:1)

您需要添加新的UI文件以及标题/类。在Qt Creator的“新文件”对话框中有一个选项(边栏上“Qt”子类别下的Qt Designer Form Class)。然后打开它并在程序的入口点(int main())中实例化类MainWindow。类似的东西:

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

你需要小心如何实例化它 - 主要是确保对象在离开当前范围时仍然存在(例如,如果你在类中的方法中调用它,则使用指针)。此外,您显示/执行对话的方式也各不相同。当你想要一个阻塞(模态)对话框而不是一个新的“窗口”时,通常就是这种情况。

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

dialog->setAttribute(Qt::WA_DeleteOnClose);