Что эквивалентно QMessageBox::information()
, когда вы хотите написать приложение QML с помощью Qt Quick Controls?
Как показать окно с помощью Qt Quick Controls?
Ответ 1
В 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 so cool that you are using Qt Quick."
onAccepted: {
console.log("And of course you could only agree.")
Qt.quit()
}
Component.onCompleted: visible = true
}
Ответ 2
Вы можете использовать Popup В QtQuick Controls 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
}
}
Ответ 3
Хорошо, это делает работу (плохо). Импортируйте объект 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
}
}
Проблемы с ним:
- Окно можно уменьшить, чтобы текст и кнопка перекрывались.
- Минимальный размер окна жестко закодирован, а не рассчитывается из размера текста.
- Вы не можете выбрать текст.
- Выглядит немного дерьмо.
Ответ 4
К сожалению, нет ни одного, по крайней мере, не в Qt Quick Controls для доставки Qt 5.1.1: (
Вам нужно добавить его в свой проект с помощью QObject
обертки.
Ответ 5
// 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