• 7126阅读
  • 6回复

我用QPainter类做的一个指针钟表,12点这个位置 被放置在水平方向了,怎么改? [复制链接]

上一主题 下一主题
离线denglangyu
 

只看楼主 倒序阅读 楼主  发表于: 2009-01-08
— 本帖被 XChinux 执行加亮操作(2009-01-08) —
我用QPainter类做的一个指针钟表,12点这个位置 被放置在水平方向了,怎么改?而且如果按照水平方向来看,显示的时间就是正确的。另外时间栏和指针栏怎么样对应起来,麻烦各位大侠帮下忙啊。我知道是用信号与槽来实现,但是由于小弟刚接触QT不到一周,誰的信号,誰的槽,不太清楚,对于qt类的类型层次也不清楚,不好做了。

部分代码:
//#include“CLockWidget.h”
void ClockWidget :: paintEvent(QPaintEvent *)
{
    if(s>59)s=s%60;
    if(s==0)m++;
    if(m>59){
              m=m%60;
              if(m==0)
              h++;
              }
    if(h>11)
    h=h%12;
    s++;
  //绘制图形
     QPainter painter(this);
    painter.setWindow(-30,-30,60,60);
     //画表外盘
     painter.save();
    painter.setBrush(Qt::white);
    painter.drawEllipse(QPoint::QPoint(0,0),30,30);
   
    painter.restore();
    //画时针
    painter.save();
    painter.rotate(30*(h%12)+m*0.5);
    painter.setPen(Qt::black);
    painter.drawLine(-2,0,15,0);
    painter.restore();

    //画分针
    painter.save();
    painter.rotate(m*6+s*0.1);
    painter.setPen(Qt::blue);
    painter.drawLine(-5,0,25,0);
    painter.restore();
    //画秒针
    painter.save();
    painter.rotate(s*6);
    painter.setPen(Qt::red);
    painter.drawLine(-10,0,30,0);
    painter.restore();
    //画时钟刻度
      //大刻度
  painter.save();
    painter.setPen(Qt::red);
    for(int i=0;i<12;++i)
    {
            painter.rotate(30);
            painter.drawLine(28,0,30,0);
    }
    painter.restore();
        //小刻度
    painter.save();
    painter.setPen(Qt::blue);
    for(int j=0;j<60;++j)
    {
      if((j%5)!=0)
      painter.drawLine(29,0,30,0);
      painter.rotate(6.0);
            }
      painter.restore();


}
main函数
#include<QtGui>
#include<QtCore>
#include"ClockWidget.h"
int main(int argc,char **argv)
{
    QApplication app(argc,argv);
    QWidget *widget=new QWidget;
    widget->resize(400,400);
    widget->setWindowTitle("My Clock!");
    QTimeEdit *timeEdit=new QTimeEdit(QTime ::currentTime(),widget);
    timeEdit->setGeometry(260,260,140,20);
    QLabel *label=new QLabel(widget);
    label->setText("Time");
    label->setGeometry(260,210,100,30);
    ClockWidget *clock=new ClockWidget(widget);
    clock->setGeometry(5,5,210,210);

widget->show();

    return app.exec();

}


附图:现在时间5电06分 只有将水平方向看成12电,才显示正确
离线denglangyu

只看该作者 1楼 发表于: 2009-01-08
高手们帮帮忙啊  我有急用啊啊啊啊啊啊啊啊
timeEdit 里时间更改,怎么传送到clock中,用什么传送?我想在main函数里实现
离线denglangyu

只看该作者 2楼 发表于: 2009-01-08
高手们呢?  怎么都没人理啊 是不是看不上这个问题
快来人啊啊啊啊
救救我
离线denglangyu

只看该作者 3楼 发表于: 2009-01-09
看来还是求人 不如求己

原来我的每个画线函数都是 从 x负方向 开始设置的painter.drawLine(-10,0,30,0)
如果第一个点设置为 (-10,0)就表示 以X负方向为起点
把第一个点改为 (0,5)就可以表示 Y轴正方向为起始
哈哈哈哈哈
离线litao422
只看该作者 4楼 发表于: 2009-01-09
呵呵,支持原创!
离线long5337

只看该作者 5楼 发表于: 2009-01-18
支持一下!!!
离线wd007

只看该作者 6楼 发表于: 2009-01-19
其实每个人都可以做到原创的
欢迎访问我的博客,一起学习提高
http://blog.csdn.net/qter_wd007
快速回复
限100 字节
 
上一个 下一个