[英]How to add hyperlinks in Qt without QLabel?
您可以轻松地使小部件在单击时打开链接:
class Link : public QWidget {
Q_OBJECT
public:
Link(QUrl url, QWidget p = nullptr) : QWidget(p), _url(url) {}
QUrl _url;
void mouseReleaseEvent(QMouseEvent *) { QDesktopServices::openUrl(_url); }
}
您可以避免任何额外的信号和连接,并让每个链接窗口小部件在内部存储自己的链接,可以在构造时设置url并随时更改。 不使用信号和插槽,也可以更轻松地更改链接,而不必断开先前的连接。
IMO寻求信号和插槽解决方案仅在您想要不同的任意行为时才是合理的。 在这种情况下,您总是想要相同的-打开特定的链接,因此您也可以对其进行硬编码,并寻求一种更简单,计算效率更高的解决方案。
我只是手动捕获clicked()的信号并使用桌面服务在代码中打开URL。
bool QDesktopServices::openUrl ( const QUrl & url ) [static]
在适用于用户桌面环境的Web浏览器中打开给定的url,如果成功,则返回true;否则,返回true。 否则返回false。
http://doc.qt.io/qt-4.8/signalsandslots.html
使用这种语法或在设计器中,您还可以将信号连接到插槽。
connect(widgetThatRepresentsURL, SIGNAL(clicked()),
handlerThatWillOpenTheURL, SLOT(clicked_on_url()));
对于没有为单击(或您感兴趣的任何事件)设置信号的窗口小部件,可以将有问题的窗口小部件子类化并重新实现...
void QWidget::mousePressEvent ( QMouseEvent * event ) [virtual protected]
专门用于产生信号的是emit
。 我过去像下面这样使用
void Cell::focusInEvent(QFocusEvent *e)
{
emit focus(this, true);
QLineEdit::focusInEvent(e);
}
标头中包含以下内容
signals:
void focus(Cell *, bool);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.