我有一个QDialog
有一个布局,在这个布局中有多个QWidgets
。现在我有一个按钮,如果用户按下此按钮,我想显示一个“工具提示”,显示更多信息。这个“工具提示”必须包含一个布局。
为此,我想使用具有绝对位置的QWidget
。当我整理this question中提到的代码时,解决方案对我不起作用。我还尝试使用QtWidget.raise_()
函数,但未显示QWidget
。
我将我的代码剥离到以下示例:
# creating content
layout = QtWidgets.QVBoxLayout()
for i in range(0, 10):
layout.addWidget(QtWidgets.QLabel("line {} - bla bla bla bla bla bla".format(i)))
widget = QtWidgets.QWidget()
widget.setLayout(layout)
# creating dialog and apply the layout
dialog = QtWidgets.QDialog()
dialog.setLayout(layout)
# creating the absolute positioned widget
absolute_layout = QtWidgets.QVBoxLayout()
absolute_layout.addWidget(QtWidgets.QLabel("Absolute positioned QWidget"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))
absolute_layout.addWidget(QtWidgets.QLabel("With some widgets in itself"))
absolute = QtWidgets.QWidget(dialog)
absolute.setLayout(absolute_layout)
# show the absolute widget and move it
absolute.show()
absolute.move(10, 10)
absolute.raise_()
dialog.show()
对话框正确显示layout
中的内容,但absolute
未显示。
我做错了什么?
答案 0 :(得分:1)
使用......
dataType: 'json',
success: function(data) {
console.log(data);
var n = [];
var s = [];
for(var i in data) {
n.push(data[i].name);
s.push(data[i].score);
}
您已absolute = QtWidgets.QWidget(dialog)
成为absolute
的孩子。因此,dialog
的几何图形将始终在某种程度上由absolute
控制。如果您希望能够指定窗口小部件的绝对几何图形,请使用...
dialog
答案 1 :(得分:0)
所以在@ G.M的帮助下。我发现解决方案非常简单:
absolute = QtWidgets.QWidget()
absolute.setParent(dialog)
我原以为QWidget::QWidget(QWidget * parent = 0, Qt::WindowFlags f = 0)
构造函数在内部调用QWidget::setParent(QWidget * parent)
方法(这不是真的吗?)。