2013-09-13 3 views
12

Что такое эквивалент QMessageBox::information(), когда вы хотите написать приложение QML с помощью Qt Quick Controls?Как показать окно с помощью Qt Quick Controls?

+0

В моем проекте я использую компонент окна QML как модальный для этого, что я с учетом моих потребностей: http://qt-project.org/doc /qt-5.0/qtquick/qml-qtquick-window2-window.html – koopajah

+0

Можете привести пример? – Timmmm

ответ

10

В Qt 5.2 есть MessageDialog:

http://doc.qt.io/qt-5/qml-qtquick-dialogs-messagedialog.html

import QtQuick 2.2 
import QtQuick.Dialogs 1.1 

MessageDialog { 
    id: messageDialog 
    title: "May I have your attention please" 
    text: "It's so cool that you are using Qt Quick." 
    onAccepted: { 
     console.log("And of course you could only agree.") 
     Qt.quit() 
    } 
    Component.onCompleted: visible = true 
} 
1

К сожалению, есть не один, по крайней мере, не в судоходном Qt Quick Controls, как в Qt 5.1.1 :(

Вы должны добавить его в свой проект через QObject wrapper.

2

Ok это делает работу (плохо) Импорт Window объекта:.

import QtQuick.Window 2.1 

Затем добавить это в главном окне (или вы можете поместить его в другой файл, я думаю):

function showMessage(text, title) 
{ 
    messageBox.text = text; 
    messageBox.title = title; 
    messageBox.visible = true; 
} 

Window { 
    id: messageBox 
    modality: Qt.ApplicationModal 
    title: "" 
    visible: false 
    property alias text: messageBoxLabel.text 
    color: parent.color 
    minimumHeight: 100 
    minimumWidth: 300 
    Label { 
     anchors.margins: 10 
     anchors.top: parent.top 
     anchors.left: parent.left 
     anchors.right: parent.right 
     anchors.bottom: messageBoxButton.top 
     horizontalAlignment: Text.AlignHCenter 
     wrapMode: Text.WordWrap 
     id: messageBoxLabel 
     text: "" 
    } 

    Button { 
     anchors.margins: 10 
     id: messageBoxButton 
     anchors.bottom: parent.bottom 
     anchors.horizontalCenter: parent.horizontalCenter 
     text: "Ok" 
     onClicked: messageBox.visible = false 
    } 
} 

Проблемы с ним:

  1. Окно может быть сжат так, чтобы текст и кнопка перекрытия.
  2. Минимальный размер окна жестко закодирован, а не рассчитывается из размера текста.
  3. Вы не можете выбрать текст.
  4. Выглядит немного дерьмо.
3

вы можете использовать Popup В QtQuick управления 2:

import QtQuick.Window 2.2 
import QtQuick.Controls 2.0 // or import Qt.labs.controls 1.0 


Window { 
    id: window 
    width: 400 
    height: 400 
    visible: true 
Button { 
    text: "Open" 
    onClicked: popup.open() 
} 

Popup { 
    id: popup 
    x: 100 
    y: 100 
    width: 200 
    height: 300 
    modal: true 
    focus: true 
     closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent 
    } 
} 
0
// CenteredDialog.qml 
import QtQml 2.2 

import QtQuick 2.9 
import QtQuick.Controls 2.2 

Dialog { 
    parent: ApplicationWindow.overlay 

    x: (parent.width - width)/2 
    y: (parent.height - height)/2 

    focus: true 
    modal: true 

    property alias text: messageText.text 

    Label { 
     id: messageText 

     verticalAlignment: Text.AlignVCenter 
     horizontalAlignment: Text.AlignHCenter 

     anchors.fill: parent 
    } 

    standardButtons: Dialog.Ok 
} 

Вы можете объявить CenteredDialog { id: centeredDialog } где-то, то в какой-то обработчик событий вы можете позвонить:

centeredDialog.title = qsTr("Error!") 
centeredDialog.text = qsTr("Access violation") 
centeredDialog.visible = true 
Смежные вопросы