【问题标题】:Qt Designer: Edit other window than mainwindowQt Designer:编辑主窗口以外的其他窗口
【发布时间】:2014-01-22 22:14:58
【问题描述】:

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

主窗口.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;
};

主窗口.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 是否适合这项任务?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    dialog->setAttribute(Qt::WA_DeleteOnClose);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多