在Qt中使Qlabel可点击或双击
Make Qlabel clickable or double clickable in Qt
我是Qt的初学者,现在我想让我的标签可以点击,我在网上搜索了很多,但是没有人给我一个他们是如何制作的真实例子。那么有人可以一步一步教我吗?现在我的基本思路是分别创建一个新的.c文件和新的.h文件,然后将它们包含到我的mainwindow.c中,然后将其与现有标签以ui形式连接起来。这些是我想做的,但做不到。希望有人能教教,最好把步骤图放在命令里,谢谢。
这是 clicklabel.h 代码:
#ifndef CLICKEDLABEL_H
#define CLICKEDLABEL_H
#include <QWidget>
#include <QLabel>
class ClickedLabel : public QLabel
{
Q_OBJECT
public:
ClickedLabel(QWidget *parent=0): QLabel(parent){}
~ClickedLabel() {}
signals:
void clicked(ClickedLabel* click);
protected:
void mouseReleaseEvent(QMouseEvent*);
};
#endif // CLICKEDLABEL_H
这是 clicklabel.c 代码:
#include "clicklabel.h"
void ClickedLabel::mouseReleaseEvent(QMouseEvent *)
{
emit clicked(this);
}
这些是我添加到我的 mainwindow.c(标签的名称是 click_test):
void data_labeling::on_label_clicked()
{
QString path="/home/j/Pictures/images.jpeg";
QPixmap cat(path);
connect(ui->click_test, SIGNAL(clicked()), this,
SLOT(on_label_clicked()));
ui->click_test->setPixmap(cat);
ui->click_test->resize(cat.width(),cat.height());
}
当然,我已将其提升为 clicklabel.h,并且我已将 void on_label_click() 添加到私人插槽下的 mainwindow.h,但没有任何反应。
你可以使用QPushButton
代替,但如果你迫切需要QLabel
,你可以这样做:
clickable.h
class Clickable :public QLabel
{
Q_OBJECT
signals:
void clicked();
public:
void mousePressEvent(QMouseEvent* event);
using QLabel::QLabel;
};
clickable.cpp
void Clickable::mousePressEvent(QMouseEvent* event)
{
emit clicked();
}
更新:
我在我的源代码中使用了这个实现。我无法粘贴完整的代码,但这是我使用它的部分。
source.h
...
private:
QLabel* label1;
QLabel* label2;
...
source.cpp
...
label1 = new Clickable("label1 text", this);
label2 = new Clickable("label2 text", this);
...
connect(label1 , SIGNAL(clicked()), this, SLOT(label1clicked()));
connect(label2 , SIGNAL(clicked()), this, SLOT(label1clicked()));
...
创建一个从 QLabel
派生的新 class,重新实现 mousePressEvent
以发出自定义 pressed()
信号(或您需要的任何其他功能)
如果您需要在 ui 个文件中使用可点击标签,请按照以下步骤操作:
在表格中添加QLabel
右击添加的标签然后selectPromote to...
输入您的可点击标签class名称及其头文件名称
按添加,然后 select 树中的标签和 select promote
现在您可以像使用 ui->
的任何 QWidget 一样使用您的子classed 标签(本教程实际上适用于任何子classed 小部件)
我是Qt的初学者,现在我想让我的标签可以点击,我在网上搜索了很多,但是没有人给我一个他们是如何制作的真实例子。那么有人可以一步一步教我吗?现在我的基本思路是分别创建一个新的.c文件和新的.h文件,然后将它们包含到我的mainwindow.c中,然后将其与现有标签以ui形式连接起来。这些是我想做的,但做不到。希望有人能教教,最好把步骤图放在命令里,谢谢。 这是 clicklabel.h 代码:
#ifndef CLICKEDLABEL_H
#define CLICKEDLABEL_H
#include <QWidget>
#include <QLabel>
class ClickedLabel : public QLabel
{
Q_OBJECT
public:
ClickedLabel(QWidget *parent=0): QLabel(parent){}
~ClickedLabel() {}
signals:
void clicked(ClickedLabel* click);
protected:
void mouseReleaseEvent(QMouseEvent*);
};
#endif // CLICKEDLABEL_H
这是 clicklabel.c 代码:
#include "clicklabel.h"
void ClickedLabel::mouseReleaseEvent(QMouseEvent *)
{
emit clicked(this);
}
这些是我添加到我的 mainwindow.c(标签的名称是 click_test):
void data_labeling::on_label_clicked()
{
QString path="/home/j/Pictures/images.jpeg";
QPixmap cat(path);
connect(ui->click_test, SIGNAL(clicked()), this,
SLOT(on_label_clicked()));
ui->click_test->setPixmap(cat);
ui->click_test->resize(cat.width(),cat.height());
}
当然,我已将其提升为 clicklabel.h,并且我已将 void on_label_click() 添加到私人插槽下的 mainwindow.h,但没有任何反应。
你可以使用QPushButton
代替,但如果你迫切需要QLabel
,你可以这样做:
clickable.h
class Clickable :public QLabel
{
Q_OBJECT
signals:
void clicked();
public:
void mousePressEvent(QMouseEvent* event);
using QLabel::QLabel;
};
clickable.cpp
void Clickable::mousePressEvent(QMouseEvent* event)
{
emit clicked();
}
更新:
我在我的源代码中使用了这个实现。我无法粘贴完整的代码,但这是我使用它的部分。
source.h
...
private:
QLabel* label1;
QLabel* label2;
...
source.cpp
...
label1 = new Clickable("label1 text", this);
label2 = new Clickable("label2 text", this);
...
connect(label1 , SIGNAL(clicked()), this, SLOT(label1clicked()));
connect(label2 , SIGNAL(clicked()), this, SLOT(label1clicked()));
...
创建一个从 QLabel
派生的新 class,重新实现 mousePressEvent
以发出自定义 pressed()
信号(或您需要的任何其他功能)
如果您需要在 ui 个文件中使用可点击标签,请按照以下步骤操作:
在表格中添加
QLabel
右击添加的标签然后select
Promote to...
输入您的可点击标签class名称及其头文件名称
按添加,然后 select 树中的标签和 select
promote
现在您可以像使用 ui->