我有一个项目,通过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
甚至是这个任务的合适类吗?
答案 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);