【发布时间】:2015-06-25 14:28:15
【问题描述】:
我需要使Qlabel 可点击,基本上我曾经在我的主窗口中显示图像,通过谷歌搜索我发现我需要为Qlabel 创建一个子类,根据此链接https://wiki.qt.io/Make-a-QLabel-Clickable。
我的问题是如何在我的 UI 设计器中使用这个自定义类,这可能吗?或者我只能通过代码来管理这个 UI 元素?
任何帮助将不胜感激..
谢谢 哈里斯
【问题讨论】:
我需要使Qlabel 可点击,基本上我曾经在我的主窗口中显示图像,通过谷歌搜索我发现我需要为Qlabel 创建一个子类,根据此链接https://wiki.qt.io/Make-a-QLabel-Clickable。
我的问题是如何在我的 UI 设计器中使用这个自定义类,这可能吗?或者我只能通过代码来管理这个 UI 元素?
任何帮助将不胜感激..
谢谢 哈里斯
【问题讨论】:
在 Qt Desiger 中,您必须创建一个 QLabel,然后将其“提升”到 ClickableLabel 类。
为此,请右键单击在您的小部件中实例化的 QLAbel 对象,选择“Promote widget...”并指定 ClickableLabel 类名和定义它的头文件的路径。
请注意,ClickableLabel 的头文件和源文件都必须是 Qt 项目的一部分。
这应该可以正常工作!
【讨论】:
QLabel,创建10个ClickableLabel对象。现在,如果您真的有 10 个对象,您还可以在 .ui 中保留一个空布局,并使用 for 循环从类构造函数(实例化 .ui 的那个)以编程方式添加标签。然后直接创建ClickableLabel 对象并将它们添加到原本为空的布局中(使用addWidget)。
我想UI设计师指的是QT Creator...
您可以通过以下方式将标准 QLabel 升级为可点击标签:
创建 ClickableLabel 类。
在 QT Creator 中创建标准 QLabel -widget。
在表单编辑器的新 QLabel-widget 顶部单击鼠标右键,然后选择“Promote to”。
在“Promoted class name”字段中输入之前创建的 ClickableLabel 类的名称。该对话框还会根据类的名称自动填充头文件字段。
按添加按钮。
从列表中选择一个新的提升类,然后按“提升”-按钮。
现在,在步骤 2 中创建的 QLabel 小部件实际上是 ClickableLabel 对象。
【讨论】:
使用您提供的链接,我将main() 设为如下:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow *w = new MainWindow;
ClickableLabel *MyLable = new ClickableLabel("Amol",w);
MyLable->show();
w->show();
return a.exec();
}
重要的一点是,当您自定义小部件时,您需要将parent pointer 传递给自定义小部件,此处为MainWindow。自定义小部件后,您需要以编程方式提供其所有属性。请在您的项目中为ClickableLabelclass 添加相应的.h 和.cpp。
希望这对您有所帮助。
【讨论】: