Qt学习笔记--窗口部件(Widget)



1. Widget是GUI编程的基本组件
2. 每个Widget可以放置在一个UI内或者作为一个独立的窗口
3. 每种类型的组件都是Widget的子类,Widget继承QObject
4. 每个Widget在构造时可以指定它的父对象,这样可以保证它不用时自动析构
5. 存在父子关系的Widgets,每个子Widget都显示在父Widget内;当父Widget析构时,
所有的子Widget自动析构
6. 每个程序一般都包含一个main.cpp,里面有main函数

[c-sharp] view plain copy print ?
  1. #include <QtGui>  
  2. // 其他的自定义头文件  
  3. // ...  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication app(argc, argv);  
  7.     // 创建Widget,显示它  
  8.     // ...  
  9.     return app.exec();  
  10. }  
 
7. 如果一个Widget构造时没有父对象,那么它被视为一个窗口(window),or顶级Widget
8. 隐藏或者关闭一个window时,并不会自动销毁(destroy)它,在程序退出时才销毁它
9. 使用QLayout进行布局,布局可以嵌套
  1. int main(int argc, char *argv[])  
  2. {  
  3.     QApplication app(argc, argv);  
  4.     QWidget window;   // 顶级Widget  
  5.     // 手动布局  
  6.     // 指明父对象,调用translate翻译,context为childwidget  
  7.     QPushButton *button = new QPushButton(  
  8.             QApplication::translate("childwidget""Press me"), &window);  
  9.     button->move(100, 100);  
  10.     button->show();  
  11.       
  12.     QLabel *label = new QLabel(QApplication::translate("windowlayout""Name:"));  
  13.     QLineEdit *lineEdit = new QLineEdit();  
  14.       
  15.     // 自动布局,父子关系暂不明朗  
  16.     QHBoxLayout *layout = new QHBoxLayout();  
  17.     layout->addWidget(label);  
  18.     layout->addWidget(lineEdit);  
  19.     window.setLayout(layout); // 确定父子关系  
  20.     window.setWindowTitle(  
  21.             QApplication::translate("windowlayout""Window layout"));  
  22.     window.show();  
  23.     return app.exec();  
  24. }  
 
10. 自定义Widget,实现paintEvent函数,它在以下情况下自动调用:

  • 第一次显示时
  • 被遮挡后,又暴露出来
  • 调用update函数

  1. class AnalogClock : public QWidget  
  2. {  
  3.     Q_OBJECT  
  4.       
  5. public:  
  6.     AnalogClock(QWidget *parent = 0);  
  7.       
  8. protected:  
  9.     void paintEvent(QPaintEvent *event);  
  10. };  
  11. AnalogClock::AnalogClock(QWidget *parent)  
  12.     : QWidget(parent)  
  13. {  
  14.     ...  
  15.     setWindowTitle(tr("..."));  
  16.     resize(200, 200);  
  17. }  
  18. void AnalogClock::paintEvent(QPaintEvent *event)  
  19. {  
  20.     Q_UNUSED(event);  
  21.     QPainter painter(this); // 绘图工具  
  22.     painter.setRenderHint(QPainter::Antialiasing); // 反锯齿  
  23.     // 坐标转换,移到源点到Widget的中心  
  24.     painter.translate(width() / 2, height() / 2);  
  25.     painter.scale(side / 200.0, side / 200.0);  
  26. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值