在 qt 中创建一个可切换的文本小部件
Creating a toggleable text widget in qt
我不想使用传统的复选框,而是想使用更易于阅读的格式来显示我的选项。为了准确展示我想要的东西,我用我非常熟悉的语言实现了它。
是否可以使用 Qt 重新创建以下示例?如果是这样,我想要一些关于如何做的指示,对我来说如何以非 hacky 方式做这件事并不明显。
var $ = document.querySelector.bind(document);
var toggle = $('.toggle');
var first = toggle.firstChild;
var last = toggle.lastChild;
last.style.display = "none";
function hide(el) {
el.style.display = "none";
}
function show(el) {
el.style.display = "inherit";
}
var current = false;
toggle.addEventListener("click", function () {
current = !current;
if (!current) {
hide(last);
show(first);
} else {
show(last);
hide(first);
}
});
span.toggle {
border-bottom: 1px dashed;
}
span.toggle:hover {
cursor: pointer;
}
<p class="example">I will start <span class="toggle"><span>minimized</span><span>maximized</span></span>!</p>
您可以通过连接到 QLabel
的 linkActivated
信号来实现此目的。 QLabel
可以包含富文本,如 URL,单击时会发出 linkActivated
信号。下面包含一个最小示例。
在此示例中,我们创建了一个 QLabel
,其中包含一些包含可点击文本周围锚点的富文本(我将锚点称为 #toggle
,但它可以是任何内容)。单击时,它会触发 linkclicked
方法,该方法根据锚点更改文本。所以我们在两个锚之间交换,#toggle
和 #toggle2
,同时也改变文本。
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
win = QtGui.QMainWindow()
label = QtGui.QLabel('I will start <a href="#toggle">minimized</a>!')
def linkclicked(url):
if url == '#toggle':
label.setText('I will start <a href="#toggle2">maximized</a>!')
else:
label.setText('I will start <a href="#toggle">minimized</a>!')
label.linkActivated.connect(linkclicked)
win.setCentralWidget(label)
win.show()
sys.exit(app.exec_())
这显然是一个最小的例子。您可以将当前状态存储在一个布尔变量中,并根据它切换文本(不需要多个锚点名称)或其他所有东西!希望这能为您提供一个可以扩展的基本概念。
我不想使用传统的复选框,而是想使用更易于阅读的格式来显示我的选项。为了准确展示我想要的东西,我用我非常熟悉的语言实现了它。
是否可以使用 Qt 重新创建以下示例?如果是这样,我想要一些关于如何做的指示,对我来说如何以非 hacky 方式做这件事并不明显。
var $ = document.querySelector.bind(document);
var toggle = $('.toggle');
var first = toggle.firstChild;
var last = toggle.lastChild;
last.style.display = "none";
function hide(el) {
el.style.display = "none";
}
function show(el) {
el.style.display = "inherit";
}
var current = false;
toggle.addEventListener("click", function () {
current = !current;
if (!current) {
hide(last);
show(first);
} else {
show(last);
hide(first);
}
});
span.toggle {
border-bottom: 1px dashed;
}
span.toggle:hover {
cursor: pointer;
}
<p class="example">I will start <span class="toggle"><span>minimized</span><span>maximized</span></span>!</p>
您可以通过连接到 QLabel
的 linkActivated
信号来实现此目的。 QLabel
可以包含富文本,如 URL,单击时会发出 linkActivated
信号。下面包含一个最小示例。
在此示例中,我们创建了一个 QLabel
,其中包含一些包含可点击文本周围锚点的富文本(我将锚点称为 #toggle
,但它可以是任何内容)。单击时,它会触发 linkclicked
方法,该方法根据锚点更改文本。所以我们在两个锚之间交换,#toggle
和 #toggle2
,同时也改变文本。
from PySide import QtGui, QtCore
import sys
app = QtGui.QApplication(sys.argv)
win = QtGui.QMainWindow()
label = QtGui.QLabel('I will start <a href="#toggle">minimized</a>!')
def linkclicked(url):
if url == '#toggle':
label.setText('I will start <a href="#toggle2">maximized</a>!')
else:
label.setText('I will start <a href="#toggle">minimized</a>!')
label.linkActivated.connect(linkclicked)
win.setCentralWidget(label)
win.show()
sys.exit(app.exec_())
这显然是一个最小的例子。您可以将当前状态存储在一个布尔变量中,并根据它切换文本(不需要多个锚点名称)或其他所有东西!希望这能为您提供一个可以扩展的基本概念。