【问题标题】:QTCreator 5.0.2, parallel run of two window, C++QTCreator 5.0.2,两个窗口并行运行,C++
【发布时间】:2022-01-04 21:11:32
【问题描述】:

我浏览了有关我的问题的建议“问题”。但是两者都不能解决。

我编写了两个窗口。第二个窗口从第一个窗口打开。我需要激活两个窗口,但是要启动我使用的第一个窗口(MainWindow):

    int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowModality(Qt::NonModal);        
    return a.exec();
}

如前所述,第二个窗口是从 pushButton 启动的,它以相同的方式位于第一个窗口(MainWindow)中。

void MainWindow::on_pushButton_2_clicked()
{    
    Graphics gr;
    gr.setWindowModality(Qt::NonModal);
    gr.exec();
}

我将模态更改为非模态,但是问题没有改变。 Non-Modal 的意思是:“该窗口不是模态的,不会阻止对其他窗口的输入。”

你有什么想法,如何解决这个问题?

【问题讨论】:

  • 您需要使用.show(),并且您还需要确保Graphics 对象实际上存在于按钮单击处理程序之外。您正在使用一个局部变量 - 该变量在函数返回时被销毁,并带走窗口。

标签: c++ qt-creator qdialog


【解决方案1】:

Graphics gr; 定义了一个局部变量,因此对象一旦超出范围(在函数末尾)就会被销毁。

在 Qt 中,典型的方法是使用指向 Qt 小部件的指针(更一般地,QObjects),但每个小部件都有一个父级 - 父级会清理它。

试试这个:

auto gr = new Graphics(this);
gr->setWindowModality(Qt::NonModal); // this is the default, no need for this call
gr->show();

这样窗口将一直存在,直到您的主窗口被破坏。在 Qt 中还有一种小部件/对象自毁的机制:

this->deleteLater();

因此,例如,如果您想关闭 清理gr,您可以使用该机制(您也可以将gr 存储为成员并调用gr->deleteLater()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多