2011-02-25 64 views
0

我是QT编程的新手,我有一个问题。我有一个qslider,qlabel和一个视频播放。在播放视频时,qslider的勾号会按照您的猜测向前移动。我想要做的就是把一个qlabel放在qslider的勾号下,然后用tick作为qlabel正在更新的文本...动态更改qlabel的位置

+0

您可以使用setGeometry以及更改它在对话框中的位置... – Mostafa 2013-10-25 03:31:01

回答

0

首先你可以试试QLabel.setIndent(self,int),调用它每当滴答变化。如果这对你有用,这是最简单的可能性,如果不是请转发。

+0

谢谢,但QLabel.setIndent(self,int)中的自我是什么? – 2011-03-01 12:30:07

+0

看看setIndent的文档,在这个和其他方法中他们使用self作为第一个参数。我的解释是,这是一个隐含的参数,由Python中的消息接收者给出。所以我认为它的工作原理,如果你只是调用你的MySQLabel.setIndent(int)。 “yourQLabel”是第一个(隐式)参数。 – 2011-03-01 13:45:01

2

由于Qt layout system的原因,您无法将“QLavel”移动到整个窗口小部件:该窗口小部件存在于布局中。 因此,如果您只想“横向”移动您的标签,则只能通过水平垂直方向来解决问题。

,最简单的一个是使用QLabel::setIndent函数(它将QLabel内“移动”文本):

如果标签显示文本,缩进适用于左边缘如果对准()是Qt的:: AlignLeft,如果alignment()是Qt :: AlignRight,则返回到右边缘;如果alignment()是Qt :: AlignTop,则返回顶部边缘;如果alignment()是Qt :: AlignBottom,则返回底部边缘。你

也可以尝试这种方式(将 '搬家' QLabel本身):

  1. 创建框布局(QHBoxLayoutQVBoxLayout)。
  2. 添加一段时间(呼叫QBoxLayout::addStretch)。
  3. 添加QLabel(调用QLayout::addWidget)。
  4. 再次添加拉伸。
  5. 然后,您可以更改“移动”模仿的伸缩因子。

初始拉伸因子的值将定义标签的初始位置。

的代码示例来模拟QLabel从左向右移动:

class MyWidget : public QWidget 
{ 
    Q_OBJECT 

public: 
    MyWidget(QWidget* parent) : QWidget(parent) 
    { 
    layout_ = new QHBoxLayout(this); 
    layout_->addStretch(); 
    layout_->addWidget(new QLabel("Moving text", this)); 
    layout_->addStretch(100); 

    connect(&timer_, SIGNAL(timeout()), SLOT(moveLabel())); 
    timer_.start(1000); 
    } 

public slots: 
    void moveLabel() 
    { 
    layout_->setStretch(0, layout_->stretch(0) + 1); 
    layout_->setStretch(1, layout_->stretch(1) - 1); 

    if(layout_->stretch(0) == 100) 
     timer_.stop(); 
    } 

private: 
    QBoxLayout* layout_; 
    QTimer timer_; 
}; 

并为您的具体情况另一种变体是继承QSlider,然后重新实现保护功能QWidget::paintEvent,以便在滑块来画一些标签。