2015-12-31 2 views
0

могли бы вы нибудь дать мне пример отвечать следующим требованиям:Создайте два окна

  1. одно приложение с двумя окнами/формами, они могут прикрывать друг друга, они не являются родитель/ребенок отношение.

  2. одно окно имеет кнопку, чтобы всплывающее окно с сообщением, как с помощью QMessageBox::information(this, tr("HELLO"), tr("WORLD"));

  3. когда окно сообщения выскочило, то другое окно все еще может двигаться и перетащить.

Я пробовал пары пути, все провалились, может ли кто-нибудь дать мне пример?

Благодаря

+1

Вы знакомы с QMdiArea? http://doc.qt.io/qt-5/qmdiarea.html – DaveyLaser

+0

Вы можете отобразить поле «окно модальное», а не по умолчанию, которое является «модальным приложением». См. Https://doc.qt.io/qt-5/qmessagebox.html#setWindowModality – Felix

ответ

0

Одно приложение с двумя окнами/формами, они могут прикрывать друг друга, они не родитель/ребенок отношение. Как мы можем сделать это?

С Qt Creator генерируемой виджет на основе приложения main.cpp:

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    MainWindow w1; // very simplistic 
    w1.show();  // demo  
    MainWindow w2; // for two main independent 
    w2.show();  // windows in Qt 

    // help show windows apart 
    w2.move(w1.geometry().left() + 50, 
      w1.geometry().top() + 50); 

    return a.exec(); 
} 

Конечно, это можно сделать разными способами, и у меня есть подобный подход в одном из моих приложений. Имейте в виду, что приложение выйдет только после того, как вы либо явно закроете оба «главных» окна, либо можете перегрузить QWidget::closeEvent для них обоих и сделать qApp->quit(). Таким образом, сгенерированный класс MainWindow становится классом MyMainWindow с новым обработчиком событий. Также обратите внимание, что вы получаете более одной записи панели задач в Windows (также разрешимо, но не отвечаете на этот вопрос).

И вы также получили хороший комментарий для:

Одно окно имеет кнопку всплывающее окно с сообщением, как с помощью QMessageBox :: информация (это, тр («HELLO»), Tr ("МИР"));

Когда появилось окно с сообщениями, другое окно все еще может перемещаться, а - перетащить. Как мы можем сделать это?

QMessageBox::setWindowModality должно помочь.

+0

QMessageBox :: setWindowModality делает диалог немодальным, в результате я хочу, чтобы диалоговое окно блокировалось одним окном, для другого окна все еще можно перетащить и move – 0xFFFFFFFF

+0

Попробуйте передать указатель главного окна как родительский в QMessageBox и показать() not exec() ;. – AlexanderVX

Смежные вопросы