2017-08-22 27 views
0

QWidget内にいくつかのラベルとレイアウトを入れてサイドバーの一部を構築しています。各QWidgetのは、独自のセクションで、一つの成分は、現在次のようになります。私の理解にQLabelを使わずにQtでハイパーリンクを追加するには?

screenshot of gui

、あなただけQLabelにハイパーリンクを設定することができますが、私はクリック可能な白い線の間の全領域を取得しようとしています。これは、アイコンと空白を含みます。これを達成する方法はありますか?

これは私が求めていたものと反対のものとしてマークされているので、 QLabelなしのハイパーリンクを実装しようとしていることを繰り返し述べたいと思います。

+1

申し訳ありませんが、私の悪い、それはここに3時です。私はQLabelとハイパーリンクを見て、 "ああこれはもう一度"のようなものでした:D – dtech

+0

@dtech心配はありません!それは起こります:) – xkenshin14x

+2

マウスクリックハンドラーで 'QDesktopServices :: openUrl(yourURL)'を試してみてください。 – dtech

答えて

2

と、次の

void Cell::focusInEvent(QFocusEvent *e) 
{ 
    emit focus(this, true); 
    QLineEdit::focusInEvent(e); 
} 

のように、過去にこれを使用しました余分な信号や接続を避けることができ、各リンクウィジェットに内部リンクを保存させることができます.URLはいつでも設定でき、いつでも変更できます。信号とスロットを使用しないので、以前の接続を切断しなくてもリンクを簡単に変更できます。

信号とスロットの解決策を検討しているIMOは、さまざまな恣意的な振る舞いが必要な場合にのみ正当化されます。この場合、常に同じものを望んでいます - 特定のリンクを開くためには、ハードコードして、より簡単で計算効率の高いソリューションを探してください。

+0

これは完全に機能しました!あなたはそのようなmouseReleaseEventを使用できるかどうかは分かりませんでした。ありがとう:) – xkenshin14x

1

私は手動でclicked()のSIGNALをキャッチし、デスクトップサービスを使用してコード内のURLを開きます。

bool QDesktopServices::openUrl (const QUrl & url) [static] 

ユーザーのデスクトップ環境に適したWebブラウザで指定したURLを開き、成功した場合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があります。

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); } 
} 

:私はあなたが簡単にウィジェットをクリックでリンクを開くことができますヘッダに以下の

signals: 
    void focus(Cell *, bool); 
+1

QWidgetにクリック信号がありません。 – dtech

+0

を作成するか、イベントハンドラを再実装することができます。私はあなたの答えに追加します。 – Josh

関連する問題