-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
以使用QWK的窗口为父窗口弹出另一个使用QWK的子窗口,父窗口丢失QWK特性 #51
Comments
|
1.发生崩溃并不是在程序退出时,在关闭w2时就会发生,所以我并不认为是双重析构的问题 |
我说错了,只要删除在栈上的东西就会引发异常,而不是double free的问题,不信你可以随便写个程序在栈上创建一个int然后delete它试试,开调试看看异常断在什么地方。第二点对的,在QWidget里套一个QMainWindow,确保要移动进无边框窗口的那个QWidget永远不是native window,因为顶级窗口永远是native window。 |
我刚尝试了一下,和 #43 类似,通过设置QApplication的 |
这个属性我记得在 |
我试了一下似乎只能让标题栏特性回来,如果不启用系统边框的话下面的边角是resize不了的,另外画面会有严重错位,所以我还是建议套一层。这个设置可能是忘了迁移,但是现在貌似设了也没啥用... |
关于2还是不太清楚究竟该怎么做,我的项目中软件界面使用的是QMainWindow,子对话框使用的是QDialog,我该将哪个窗口套上一层QWidget呢?套上之后,widgetWindowAgent->setup的是this(QWidget),还是被包含的QMainWindow,QDialog? |
我没搞懂你想做什么,你就是想弹一个对话框然后对话框也是无边框吗? |
是的,主界面和对话框都是用的QWK的无边框 |
我用以下代码试了,发现没有出现任何问题。 class FramelessDialog : public QDialog {
public:
FramelessDialog(QWidget *parent = nullptr) : QDialog(parent) {
auto agent = new QWK::WidgetWindowAgent(this);
agent->setup(this);
auto btn = new QPushButton("ok");
connect(btn, &QPushButton::clicked, this, &QDialog::accept);
auto layout = new QHBoxLayout();
layout->addWidget(btn);
setLayout(layout);
}
};
// MainWindow function
FramelessDialog dlg(this);
dlg.exec(); 注意不能是show。在dialog存在的时候主窗口仍然存在一个是本地窗口的child,因为exec的时候主窗口被阻塞就可以忽略主窗口特性丢失的问题,show的时候就不行。 |
开启 |
|
我是否可以理解为现在推荐的做法是: |
是的,你总结得非常正确,我觉得我要更新一下readme了 |
如下图所示,在example代码中创建MainWindow w1,并创建以w1为父窗口的w2。
两个窗口显示后,即使w2使用的是
show
不是exec
,w1仍不能移动,右键无法触发系统菜单,也丢失了SnapLayout的特性。关掉w2后也无法恢复正常。而当我设置MainWindow属性为Qt::WA_DeleteOnClose
,关闭w2,发生了崩溃,这是不合理的。在我的项目中,我打算完全引入QWK作为无边框窗口的解决方案,所以软件窗口打开的情况下,会频繁地弹出子对话框,这个问题是致命的,希望作者能关注下。
The text was updated successfully, but these errors were encountered: