c++ - Qt 设计器 : Edit other window than mainwindow

标签 c++ qt user-interface window qwidget

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

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

最佳答案

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

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

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

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

dialog->setAttribute(Qt::WA_DeleteOnClose);

关于c++ - Qt 设计器 : Edit other window than mainwindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295161/

相关文章:

c++ - 即使在 C 中使用 "\n%.2f"后,也无法将浮点值舍入到最接近的第二位小数

c++ - 重载运算符以允许 qsort 在 C++ 中工作

c++ - 如何跟踪拖放操作的生命周期?

c++ - TableView鼠标悬停显示工具提示

c++ - QT,C++ : fast way to draw live image stream from camera on QGraphicsview

user-interface - 为什么不向用户显示错误消息和系统规范?

c++ - 为什么在 main() 之前断言会导致语法错误 "error: expected ' )' before numeric constant"?

windows - 新行未写入文件(Qt)

java - 从 JTable 读取数据

c# - UI 自动化 "Selected text"