【问题标题】:How to change QWindow or QWidget without openning new form?如何在不打开新表单的情况下更改 Window 或 QWidget?
【发布时间】:2017-02-15 16:18:52
【问题描述】:

我有QMainWindowQWidget 之类的:

 namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_actionUserAdd_triggered();

    void on_actionEditUser_triggered();

    void on_actionShow_User_triggered();

private:
    Ui::MainWindow *ui;

    EditUser *editUserWindow;
    ShowUser *showUserWindow;
};

QWidget 是:

namespace Ui {
class EditUser;
}

class EditUser : public QWidget
{
    Q_OBJECT

public:
    explicit EditUser(QWidget *parent = 0);
    ~EditUser();

private:
    Ui::EditUser *ui;
};

当触发 actionEditUser 时,我正在创建新表单:

editUserWindow = new EditUser();
editUserWindow->show();

但是我不想打开/创建新表单。我想将 QWidget(EditUser) 粘贴到QMainWindow。因此,该应用程序只能在 1 个表单上运行,而不是 2,3 或更多。你能帮我怎么做吗?

【问题讨论】:

    标签: c++ qt qwidget


    【解决方案1】:

    Qt 没有父窗口的小部件是一个单独的窗口。所以答案很简单:只需设置父级。例如:

    editUserWindow = new EditUser(this);//inside mainwindow, mainwinodw is a parent of EditUser
    editUserWindow->show();
    

    但在这种情况下,editUserWindow 将被放置在0,0 位置(在父坐标中)(左上角),所以你有两种方法。使用setGeometry() 设置小部件的xywidthheight,更好的方法是:将此小部件添加到您当前的布局中。

    【讨论】:

    • 是的,它可以工作,但是当 Qwidget 放置在 QMainwindow 上时,放置在 QMainWindow 上的工具栏不再工作了。
    • 哦,也是因为版面的原因。。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多