Что эквивалентно QMessageBox::information()
, когда кто-то хочет написать приложение QML с использованием Qt Quick Controls?
Как показать окно сообщения с Qt Quick Controls?
comment
В моем проекте я использую компонент окна QML в качестве модального для этого, который я адаптировал к своим потребностям: qt-project.org/doc/qt-5.0/qtquick/
- person koopajah   schedule 13.09.2013
comment
Можете ли вы привести пример?
- person Timmmm   schedule 15.09.2013
Ответы (5)
В 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
}
person
Zmey
schedule
17.12.2013
Вы можете использовать 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
}
}
person
sayyed mohsen zahraee
schedule
06.09.2016
Хорошо, это делает работу (плохо). Импортируйте объект 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
}
}
Проблемы с ним:
- Окно можно уменьшить, чтобы текст и кнопка перекрывались.
- Минимальный размер окна жестко запрограммирован, а не вычисляется по размеру текста.
- Вы не можете выделить текст.
- Выглядит немного дерьмово.
person
Timmmm
schedule
16.09.2013
К сожалению, его нет, по крайней мере, в поставляемых Qt Quick Controls начиная с Qt 5.1.1 :(
Вам необходимо добавить его в свой проект с помощью QObject
оболочка.
person
Kuba hasn't forgotten Monica
schedule
13.09.2013
// 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
person
Tomilov Anatoliy
schedule
29.08.2017